IT评测·应用市场-qidao123.com

标题: docker 常用命令实践DEMO [打印本页]

作者: 守听    时间: 2025-1-9 01:26
标题: docker 常用命令实践DEMO
1.1 docker run -d -p 8080:80 --name web_server nginx 命令的具体解读


综上所述,这条命令的作用是在背景启动一个名为 web_server 的容器,该容器运行 nginx 镜像,并将容器内部的 80 端口映射到宿主机的 8080 端口上。这样,你就可以通过访问宿主机的 http://<宿主机IP>:8080 来访问运行在容器内的 nginx 服务了。
1.2 docker run -d --name ubuntu_container ubuntu 命令的具体解读


综上所述,这条命令的作用是在背景启动一个名为 ubuntu_container 的容器,该容器运行 ubuntu 镜像。容器启动后,你可以在背景运行各种命令和应用程序,但由于没有指定要运行的特定命令(如 -it 参数和 /bin/bash),容器大概会立即进入“已退出”状态,因为它没有要执行的前台进程。如果你盼望容器保持运行状态,你需要在 docker run 命令的末尾指定一个前台进程,好比 /bin/bash(用于交互式 shell)或任何你想要容器连续运行的服务。但在这个例子中,由于使用了 -d 参数,纵然没有前台进程,容器也会在背景启动。如果你想要检查容器的状态或与之交互,你可以使用 docker ps 来列出所有正在运行的容器,或使用 docker exec 来在已运行的容器中执行命令。
1.3 docker run -it --name ubuntu_bash ubuntu /bin/bash 命令的具体解读


综上所述,这条命令的作用是以交互模式启动一个名为 ubuntu_bash 的容器,该容器运行 ubuntu 镜像,并在容器内启动一个 Bash shell。一旦命令执行,你就会看到一个 Bash 提示符,可以在其中运行命令,就像在一个真实的 Ubuntu 环境中一样。这个环境是隔离的,意味着你在容器内所做的任何更改都不会影响你的宿主机系统。当你完成工作后,可以通过输入 exit 命令来退出 Bash shell,并停止容器(除非你在背景启动了其他进程)。
1.4 docker run -d -e MY_VAR=myvalue --name env_example ubuntu 命令的具体解读


由于在这个命令中没有指定要运行的命令(如 /bin/bash),容器会按照镜像的默认命令来运行。对于 ubuntu 镜像,默认命令通常是启动一个 Bash shell,但由于使用了 -d 参数,这个 shell 会在背景运行,而且由于没有附加到容器,所以你不会看到任何输出。
然而,需要注意的是,对于 ubuntu 镜像的默认举动,仅仅启动一个背景的 Bash shell 并没有太多实际意义,因为 Bash shell 在没有输入的情况下不会执行任何操作。在实际应用中,你大概会在 -d 模式下运行一个服务,如 Web 服务器或数据库,这些服务会在背景连续运行并监听特定的端口。
在这个特定的例子中,如果你想要验证环境变量 MY_VAR 是否已设置,你大概需要附加到容器并检查,或者运行一个可以或许显示环境变量的命令,如 env 或 printenv。但由于容器是在背景运行的,你需要先找到容器的 ID 或名称,然后使用 docker exec 命令来附加或运行命令。
例如,要查看环境变量,你可以这样做:
  1. docker exec env_example env | grep MY_VAR
复制代码
或者,如果你想要以交互方式附加到容器并手动检查环境变量,你可以这样做:
  1. docker exec -it env_example /bin/bash
复制代码
然后在 Bash 提示符下输入 echo $MY_VAR 来查看环境变量的值。不外,请注意,由于 ubuntu 镜像的默认举动,如果容器没有运行任何连续的服务,它大概会在你附加后不久就停止运行(因为 Bash shell 退出了)。在这种情况下,你大概需要修改容器的启动命令或运行一个连续的服务来保持容器运行。
1.5 docker run -d -v /path/on/host:/path/in/container --name volume_example ubuntu 命令的具体解读:


当改变主机卷的内容时,容器内的相应挂载点会立即发生变化。这是因为 Docker 的卷挂载机制答应主机和容器之间共享文件系统的一部分。当你将主机的目录挂载到容器内的一个路径时,容器对该路径的访问实际上是对主机目录的访问。
具体来说,当你使用 -v 或 --volume 参数将主机的目录挂载到容器内时,Docker 会在容器启动时创建一个到主机目录的绑定。这意味着,容器内对该挂载点的任何读写操作都会直接反映在主机目录上,反之亦然。
因此,如果你在主机上修改了挂载目录的内容(如添加、删除或修改文件),这些变化会立即在容器内的对应挂载点上可见。同样地,如果你在容器内对挂载点进行了修改,这些变化也会立即反映在主机目录上。
这种机制使得 Docker 卷成为在容器和主机之间共享数据的一种非常有效的方式。它答应你在容器外部管理和备份数据,同时仍然可以或许在容器内部访问和使用这些数据。
需要注意的是,虽然卷挂载提供了主机和容器之间的数据共享,但它并不影响容器的镜像。镜像中的文件和数据是静态的,而卷挂载答应你在运行时动态地修改数据。因此,卷挂载是 Docker 中管理容器数据的一种非常机动和强大的方式。
1.6 docker ps 命令的解释


选项


示例


1.7 docker rm <容器ID>


docker rm -f <容器ID> 或 docker rm --force <容器ID>


docker rm -f $(docker ps -aq)


docker ps -aq | xargs docker rm


注意事项


1.8 启动、重启、停止和逼迫停止容器的具体解释

docker start <容器ID>


docker restart <容器ID>


docker stop <容器ID>


docker kill <容器ID>


请注意,在使用 docker kill 命令之前,最好先尝试使用 docker stop 命令,因为它答应容器内的进程进行正常的清理操作。只有在须要的情况下才应使用 docker kill 命令。
1.9 要从 Docker 容器内部拷贝文件到主机上,你可以使用 docker cp 命令。这个命令答应你在容器和主机之间复制文件和目录。

以下是 docker cp 命令的基本语法和用法示例:
语法

  1. docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
  2. docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
复制代码

从容器内拷贝到主机上

要将文件或目录从容器内拷贝到主机上,你需要指定容器内的源路径和主机上的目的路径。例如:
  1. docker cp 容器ID或名称:/容器内/路径/到/文件或目录 /主机上/的目标/路径
复制代码
示例

假设你有一个名为 my_container 的容器,而且你想要将容器内的 /app/data.txt 文件拷贝到主机的 /home/user/data.txt 路径下,你可以使用以下命令:
  1. docker cp my_container:/app/data.txt /home/user/data.txt
复制代码
如果你想要拷贝整个目录,好比将容器内的 /app 目录拷贝到主机的 /home/user/app_backup 目录下,你可以这样做:
  1. docker cp my_container:/app /home/user/app_backup
复制代码
请注意,目的路径在主机上必须存在,或者你有权限创建它。如果目的路径已经存在而且是一个文件,而你想要拷贝的是一个目录,那么操作会失败。同样地,如果目的路径是一个目录,但你想要拷贝的是一个文件,而且该目录下已经存在一个同名文件,那么该文件将被覆盖。
使用 docker cp 命令时,请确保容器正在运行,因为你需要访问容器内的文件系统。如果容器已经停止,你大概需要先启动它,或者从容器的卷或备份中恢复数据。
1.10 docker run -it -v /home/ceshi:/home centos /bin/bash 包含了一些特定的选项和参数,下面是对这些组件的具体解读

docker run


-it


-v /home/ceshi:/home


centos


/bin/bash


综合解读

综上所述,docker run -it -v /home/ceshi:/home centos /bin/bash 命令的功能是:
执行此命令后,用户将可以或许在一个交互式的 Bash 会话中操作容器,同时容器的 /home 目录将与主机的 /home/ceshi 目录同步。
1.11 启动了一个名为mysql01的MySQL 5.7容器,该容器的MySQL服务可以通过宿主机的3310端口访问,root用户的暗码设置为123456,而且容器的配置文件和数据分别被挂载到了宿主机的/home/mysql/conf和/home/mysql/data目录下

  1. docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
复制代码
这条命令是用于在Docker中运行一个MySQL 5.7容器的。下面是对这个命令的具体解释:

综上所述,这条命令启动了一个名为mysql01的MySQL 5.7容器,该容器的MySQL服务可以通过宿主机的3310端口访问,root用户的暗码设置为123456,而且容器的配置文件和数据分别被挂载到了宿主机的/home/mysql/conf和/home/mysql/data目录下。
1.12 docker build -f /home/docker-test-volume/dockerfile1 -t kuangshen/centos:1.0 .

这条命令是在使用 Docker 来构建一个新的镜像。下面是对这个命令各部分的解释:

综上所述,这条命令的意思是:使用位于 /home/docker-test-volume/dockerfile1 的 Dockerfile 来构建一个名为 kuangshen/centos:1.0 的 Docker 镜像,其中 . 表现当前目录作为构建上下文。
1.13 docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7

这条 docker run 命令用于在 Docker 中启动一个新的 MySQL 5.7 容器实例,同时配置了一些特定的参数。下面是对这条命令的具体解释:

综上所述,这条命令的作用是:在背景启动一个名为 mysql02 的 MySQL 5.7 容器,将其内部的 3306 端口映射到宿主机的 3307 端口,设置 root 用户的暗码为 123456,并从名为 mysql01 的容器中挂载所有卷。
需要注意的是,--volumes-from 参数依靠于 mysql01 容器的存在,而且 mysql01 容器中应该已经定义了一些卷(虽然在您提供的命令中并没有显示 mysql01 容器的创建过程,但我们假设它之前已经被创建并定义了一些卷)。此外,由于 MySQL 数据通常存储在 /var/lib/mysql 目录下,如果 mysql01 容器也是 MySQL 容器,而且您盼望 mysql02 容器可以或许访问相同的数据集,那么您应该确保 mysql01 容器的 /var/lib/mysql 目录被定义为一个卷。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4