docker容器
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。
新建容器:
- 查看镜像
[root@langzi01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.14.2 3982eec12629 44 hours ago 6.07 MB
docker.io/ubuntu latest 47b19964fb50 2 weeks ago 88.1 MB
- 创建容器
[root@langzi01 ~]# docker create -it ubuntu:latest --创建容器的命令
4236b084b42c855973e1fb1696a8c8731f411a6e30c64d2813178e1967813077
- 查看新建容器
[root@langzi01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4236b084b42c ubuntu:latest "/bin/bash" 4 seconds ago Created gifted_tesla
- 新建容器状态是停止的,启动命令如下:
[root@langzi01 ~]# docker start 423 -- 423 表示容器ID 4236b084b42c 的前三个字母
423
[root@langzi01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4236b084b42c ubuntu:latest "/bin/bash" 12 minutes ago Up 10 seconds gifted_tesla
- 新建容器并启动,将上面的两个步骤合并起来
docker run ubuntu /bin/echo 'helloworld'会输出helloworld,容器自动终止
[root@langzi01 ~]# docker run ubuntu /bin/echo 'helloworld' --
helloworld
[root@langzi01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8db017e7feca ubuntu "/bin/echo helloworld" 5 seconds ago Exited (0) 4 seconds ago xenodochial_ritchie
4236b084b42c ubuntu:latest "/bin/bash" 15 minutes ago Up 3 minutes gifted_tesla
docker run参数解释可以参考:
官方文档:https://docs.docker.com/engine/reference/commandline/run/
- 启动一个终端,让用户进行输入:
[root@langzi01 ~]# docker run -t -i ubuntu:latest /bin/bash
root@5f3138275d84:/# pwd
/
root@5f3138275d84:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv
参数解释:-t : 让docker分配一个伪终端(pseudo-tty) 并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。
- 退出容器,推出容器后,容器状态自动停止:
先按 ctrl+p,再按 ctrl+q
- 守护状态运行容器:
[root@langzi01 ~]# docker run -d ubuntu /bin/sh -c "while true;do echo hello world; sleep 1; done"
c86f84d4f07d4e21b4d96d970e188d2247a412b3232cb074d0b049fa604c4036
终止容器
停止容器:
[root@langzi01 ~]# docker stop c86
启动已经停止的容器:
[root@langzi01 ~]# docker start c86
进入容器
docker attach(不常用), docker exec(常用), docker nsenter.
[root@langzi01 ~]# docker exec -ti 5f3138275d84 /bin/bash
删除容器
[root@langzi01 ~]# docker rm 5f3138275d84
导入和导出容器
- 导出
导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否是处于运行状态。
导出的命令格式为:docker export CONTAINERID
[root@langzi01 docker]# docker export c86f84d4f07d > test_for_run.tar
查看:
[root@langzi01 docker]# ls
test_for_run.tar
可以将这些导出的文件迁移到其他的服务器上,再导入到docker容器中。
- 导入容器,成为一个镜像
[root@langzi01 docker]# cat test_for_run.tar | docker import - test/run:v0.1
[root@langzi01 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/run v0.1 f893c04d639c 22 seconds ago 69.8 MB
既可以使用docker load命令来导入镜像库存储文件到本地镜像库,也可以使用docker import命令来导入一个容器快照到本地镜像库。两者的区别在于容器快照将会丢弃所有的历史记录和元数据信息,而镜像存储文件将保存完整记录,体积也会更大。此外从容器快照文件导入时,也可以重新指定标签等元数据。