文章目录
- 容器与宿主机复制
- 容器环境变量设置
- 镜像的导出和导入
由于篇幅原因,把后续的使用搬到这篇来
容器与宿主机复制
启动一个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 dockerafter 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 dockerafter 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来运行一个容器的复合命令,包含了多个参数和选项
-
docker run: 这是Docker命令行工具中用于创建一个新的容器并启动它的子命令。如果指定的镜像不存在于本地,Docker会尝试从镜像仓库下载。
-
-d: 这是一个标志选项,表示以“detached”模式运行容器,即后台运行。这意味着容器会在没有与当前终端直接关联的情况下启动,不会直接输出容器的日志信息到当前控制台。
-
–name mynginx5: 指定新创建的容器的名称为
mynginx5
。这使得后续管理容器(如停止、启动或删除)时可以通过名字而非容器ID来进行,更加方便。 -
-p 80:80: 映射端口。这个选项告诉Docker将宿主机(即运行Docker的机器)的80端口映射到容器内部的80端口。这意味着你可以通过访问宿主机的80端口来访问容器中服务的80端口。
-
mynginx:v0.4: 指定要使用的镜像及其标签。这里是要使用名为
mynginx
的镜像,版本号为v0.4
。Docker会查找本地是否有这个镜像,如果没有,则会尝试从Docker Hub或其他配置的镜像仓库中下载。 -
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