由于篇幅原因,把后续的使用搬到这篇来

容器与宿主机复制

启动一个nginx服务

root@VM-24-7-ubuntu:~# docker run --name nginx -p 80:80 -d nginx
7a1578bedd97ffc48e9516d03a148c69e216a30f2d18f2624ee569ef62f6c922

在宿主机中创建一个html文件

root@VM-24-7-ubuntu:~# mkdir -p /dockerstudy/myworkdir/container
root@VM-24-7-ubuntu:~# cd /dockerstudy/myworkdir/container/
root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# ls
root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# echo "hello docker" > index.html
root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# ls
index.html
root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# cat index.html 
hello docker

拷贝到容器中

root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker cp index.html nginx:/usr/share/nginx/html/
Successfully copied 2.05kB to nginx:/usr/share/nginx/html/

进入容器中查看

root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker container exec -it 7a1 bash
root@7a1578bedd97:/# cd /usr/share/nginx/html/
root@7a1578bedd97:/usr/share/nginx/html# ls
50x.html  index.html
root@7a1578bedd97:/usr/share/nginx/html# cat index.html 
hello docker

从外部进行访问:

在这里插入图片描述
在容器中更改一下index.html

root@7a1578bedd97:/usr/share/nginx/html# echo " after edit" >> index.html 
root@7a1578bedd97:/usr/share/nginx/html# cat index.html 
hello docker
 after edit

拷贝出来看一下

root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# ls
index.html
root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# cat index.html 
hello docker    
root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker cp nginx:/usr/share/nginx/html/index.html ./
Successfully copied 2.05kB to /dockerstudy/myworkdir/container/./
root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# cat index.html 
hello docker
 after edit

把容器资源释放一下

root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker stop nginx 
nginx
root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker rm nginx 
nginx

容器环境变量设置

启动一个容器,配置环境变量

root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker run --name nginx -d -p 80:80 -e TEST=1 nginx
74fb4827d925f7555a07de19cb42ab57fea7a119db2548548f915a1f6740a260

查看环境变量

root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker exec -it nginx bash
root@74fb4827d925:/# env | grep TEST
TEST=1

清理信息

root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker stop nginx 
nginx
root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker rm nginx 
nginx

镜像的导出和导入

创建一个首页信息

root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# cat index.html 
hello docker

运行一个nginx镜像,用docker cp把首页拷贝过去

root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker run -d --name mynginx -p 80:80 nginx
50081ae378b1a85c427481493d00aea400b462b73dd02db0f7c771dcafe884ec
root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker cp /dockerstudy/myworkdir/container/index.html  mynginx:/usr/share/nginx/html/
Successfully copied 2.05kB to mynginx:/usr/share/nginx/html/

此时去运行首页,已经可以看到信息了:

在这里插入图片描述
借助docker export保存镜像

root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker export -o mynginx.tar mynginx
root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# ll
total 185624
drwxr-xr-x 2 root root      4096 Jun  9 20:50 ./
drwxr-xr-x 3 root root      4096 Jun  9 19:36 ../
-rw-r--r-- 1 root root        13 Jun  9 20:46 index.html
-rw------- 1 root root 190064128 Jun  9 20:50 mynginx.tar

通过docker import导入镜像

root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker import mynginx.tar mynginx:v0.4
sha256:0eea711579d31ae3b284019e01be04255fd1d2cabd729dc6683aae302e0e35fa

把现在容器停止

root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker stop 500
500

此时再访问信息,就访问不到了

在这里插入图片描述
使用导出的镜像启动一个新的容器

root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker run -d --name mynginx -p 80:80 mynginx:v0.4 nginx -g "daemon off;"
7cfdc6f6da9245f2b2cb369f341c8b508e0dc294002d0aef1da7a043eb0f198f

解释一下这个命令:

这个命令是用于使用Docker来运行一个容器的复合命令,包含了多个参数和选项

  1. docker run: 这是Docker命令行工具中用于创建一个新的容器并启动它的子命令。如果指定的镜像不存在于本地,Docker会尝试从镜像仓库下载。

  2. -d: 这是一个标志选项,表示以“detached”模式运行容器,即后台运行。这意味着容器会在没有与当前终端直接关联的情况下启动,不会直接输出容器的日志信息到当前控制台。

  3. –name mynginx5: 指定新创建的容器的名称为mynginx5。这使得后续管理容器(如停止、启动或删除)时可以通过名字而非容器ID来进行,更加方便。

  4. -p 80:80: 映射端口。这个选项告诉Docker将宿主机(即运行Docker的机器)的80端口映射到容器内部的80端口。这意味着你可以通过访问宿主机的80端口来访问容器中服务的80端口。

  5. mynginx:v0.4: 指定要使用的镜像及其标签。这里是要使用名为mynginx的镜像,版本号为v0.4。Docker会查找本地是否有这个镜像,如果没有,则会尝试从Docker Hub或其他配置的镜像仓库中下载。

  6. nginx -g “daemon off;”: 这部分是在容器启动时执行的命令。具体来说,它指示容器启动nginx服务,并通过-g选项向nginx传递一个配置指令,即daemon off;。这个指令告诉Nginx不要以后台守护进程的方式运行,而是以前台进程运行。这对于希望直接在当前容器中管理Nginx进程,或者查看其输出日志的场景非常有用。不过,由于前面使用了-d让Docker容器后台运行,这里的daemon off;实际上是为了让Nginx的主进程保持在前台,而不是让整个容器保持交互式前台运行,这在某些特定场景下有其用途,比如调试。

综上所述,该命令的完整意义是:以后台模式创建并启动一个名为mynginx5的Docker容器,使用mynginx:v0.4镜像,将宿主机的80端口映射到容器的80端口,并在容器内部启动Nginx服务,且配置Nginx以非守护进程模式运行

此时这个服务就又被搭起来了:

在这里插入图片描述
查询服务,也能看到对应的信息

root@VM-24-7-ubuntu:/dockerstudy/myworkdir/container# docker container ls
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS                               NAMES
7cfdc6f6da92   mynginx:v0.4   "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp   mynginx

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐