之前我们已经探讨过了docker的镜像,看了下时间,距离上次介绍容器的镜像已经过去两个月了, 如果你已经忘记了,可以直奔专栏:容器管理
从今天开始,我们要探讨docker 的容器了,docker的容器都是从镜像开始创建的,涉及到的操作有: 创建容器,停止容器,进入容器,删除容器,导入和导出容器等。
比如基于nginx的镜像创建一个名字为 mycontainer的容器,这么创建,我们无法用docker ps查看到创建的容器,因为此时容器还没有启动。
[root@mufeng41 ~]# docker create --name mycontainer nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
934352be273e17f481397faa897da2a6adcaf2c1cc45d3e88d12c6007da39649
当我们用docker ps 查看的时候,发现没有刚刚创建的容器
[root@mufeng41 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ae30069fe97 mysql:5.7 "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
但我们可以用docker ps -a 查看,只能看到created ,已经创建成功,没有运行。
[root@mufeng41 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
934352be273e nginx "/docker-entrypoint.…" 21 seconds ago Created mycontainer
0ae30069fe97 mysql:5.7 "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
[root@mufeng41 ~]# docker ps -a |grep mycontainer
934352be273e nginx "/docker-entrypoint.…" 3 minutes ago Created mycontainer
[root@mufeng41 ~]#
[root@mufeng41 ~]# docker start mycontainer
mycontainer
[root@mufeng41 ~]# docker ps |grep nginx
934352be273e nginx "/docker-entrypoint.…" 4 minutes ago Up 6 seconds 80/tcp mycontainer
[root@mufeng41 ~]#
[root@mufeng41 ~]# docker run -d --name nginx_mufenggrow nginx
d319b233db2a2c623e1309a7b08b0de6ac64c215f08fbd813879854721a3a0c4
[root@mufeng41 ~]# docker ps |grep nginx_mufenggrow
d319b233db2a nginx "/docker-entrypoint.…" 11 seconds ago Up 10 seconds 80/tcp nginx_mufenggrow
[root@mufeng41 ~]#
[root@mufeng41 ~]# docker exec -it nginx_mufenggrow /bin/bash
root@d319b233db2a:/# ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var
boot docker-entrypoint.d etc lib media opt root sbin sys usr
root@d319b233db2a:/#
-i : 为docker打开标准输入
-t: 为docker分配一个伪中端
[root@mufeng41 ~]# docker rm -f nginx_mufenggrow
nginx_mufenggrow
[root@mufeng41 ~]# docker ps |grep nginx_mufenggrow
[root@mufeng41 ~]#
如果容器还在运行,无法删除,需要加-f参数,也可以先停止在用docker rm
停止:docker stop 容器名
docker export命令用于将容器导出为一个文件,该文件包含容器的文件系统内容和元数据,但不包含容器的运行状态。
语法:
docker export [OPTIONS] CONTAINER_ID/CONTAINER_NAME
其中:
一些常用的选项包括:
-o, --output:指定导出的文件路径和名称。
–change:应用 Dockerfile 中的指令,用于定制导出的容器。
案例: 将一个名字为MySQL的容器使用docker export导出 为 mysql_mufenggrow.tar
[root@mufeng41 ~]# docker export -o mysql_mufenggrow.tar mysql
[root@mufeng41 ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg mysql_mufenggrow.tar 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@mufeng41 ~]#
docker import命令用于将文件系统存储为Docker镜像。它可以将先前使用docker export导出的容器文件或其他文件导入为新的Docker镜像。
语法:
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
其中:
一些常用的选项包括:
–change:应用 Dockerfile 中的指令,用于定制导入的镜像。
示范案例:
·`[root@mufeng41 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@mufeng41 ~]#
可以看到什么都没有。
接下来我们把 mysql_mufenggrow.tar 重新导入镜像并开机
root@mufeng41 ~]# docker import mysql_mufenggrow.tar mysql_mufenggrow
sha256:06bfcd68bd0e74599d5e4cedf077a760150453b91bad57261308ead6bcf09703
[root@mufeng41 ~]# docker images;
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql_mufenggrow latest 06bfcd68bd0e 6 seconds ago 442MB
可以看到生成了一个mysql_mufenggrow的镜像,接下来我们用这个镜像生成容器
[root@mufeng41 ~]# docker run -it --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql_mufenggrow /bin/bash
7267c237c5accbe424106648bdcfd614743c3f008eef46dc0e7e43a922dcdb49
[root@mufeng41 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7267c237c5ac mysql_mufenggrow "/bin/bash" 2 seconds ago Up 1 second 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp mysql
使用场景:
主要用来制作基础镜像,比如从一个ubuntu镜像启动一个容器,然后安装一些软件和进行一些设置后,使用docker export保存为一个基础镜像。然后把这个镜像分发给其他人使用,作为基础的开发环境。
需要注意的是:
docker 容器的基本操作,主要是上面的 几个命令,掌握基础操作之后,我们就开始进入到docker 容器的学习了,我们下一篇文章再见。
记得操练下哦。