Docker容器是镜像的一个运行实例,不同的是,它带有额外的可写文件层。如果认为虚拟机是模拟运行的一整套操作系统和跑在上边的应用。那么Docker容器就是独立运行的一个或一组应用,以及他们必需的运行环境。
一、创建容器
1、新建容器。使用docker create命令新建一个容器:
[root@localhost ~]# docker create -it mytomcat:4.0
da84bcfe07be15092b711462990aae0371a703bfd8bbfb2e7d3a65e364279145
#查看创建的容器
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da84bcfe07be mytomcat:4.0 "/bin/bash" 30 seconds ago Created gigantic_bohr
使用该命令创建的容器处于停止状态,可以使用docker start命令来启动它。
2、新建并启动容器。启动容器有2种方法,一种是基于镜像新建一个容器并启动,另一个是将在终止状态的容器重新启动。命令是docker run,等价于先执行docker create,再执行docker start命令。
[root@localhost ~]#sudo docker run -it centos:7 /bin/bash
docker run 命令启动容器时,后台运行的标准操作包括:
检查本地是否存在指定镜像,不存在就从共有仓库下载;
利用镜像创建并启动一个容器;
分配一个文件系统,并在只读的镜像层外挂载一层作为只读层;
从宿主机配置的网桥接口中桥接一个虚拟接口到容器中去;
从地址池配置一个IP地址给容器;
执行用户指定的应用程序;
执行完毕后容器被终止。
-t选项让Dcoker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。
[root@localhost ~]# docker exec -it da84bcfe07be /bin/bash
[root@da84bcfe07be /]# exit
可以使用exit或者Ctrl+d命令来退出容器;如果不想退出运行的容器只是返回宿主机操作,可以使用
Ctrl+p和Ctrl+q来退出容器。
3、守护态运行
更多的时候需要让Docker容器在后台以守护态形式运行,可以通过添加-d参数来实现。
[root@localhost ~]# sudo docker run -d mytomcat:4.0 /bin/bash
76c8b7c646ce11ab74bd92d192896ede37c386d229ef2ec82b8b60d29ca015fe
容器启动后会返回一个唯一的ID,可以通过docker ps命令来查看容器信息。
[root@localhost ~]# sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da84bcfe07be mytomcat:4.0 "/bin/bash" 35 minutes ago Up 2 seconds gigantic_bohr
可以通过docker logs命令来获取容器输出信息。
[root@localhost ~]# sudo docker logs mytomcat
二、终止容器
可以使用docker stop 来终止一个运行中的容器,命令格式为docker stop[-t|--time[=10]]。它会首先向容器发送SIGTERM信号,等待一段时间后(默认为10秒),再发送SIGKILL信号终止容器。
[root@localhost ~]# docker stop da84bcfe07be
da84bcfe07be
注意:docker kill 命令会直接发送SIGKILL信号来强制终止容器。
可以使用docker ps -a -q命令看到处于终止状态的容器ID。
[root@localhost ~]# docker ps -a -q
76c8b7c646ce
da84bcfe07be
753f856bca45
dc668d3265fd
终止状态的容器可以使用docker start命令来重新启动容器,docker restart命令会将一个运行的容器终止并重新启动它。
三、进入容器
1、attach命令
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da84bcfe07be mytomcat:4.0 "/bin/bash" About an hour ago Up 5 seconds
gigantic_bohr
[root@localhost ~]# docker attach da84bcfe07be
[root@da84bcfe07be /]#
当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法操作。
2、exec命令
Docker1.3版本起,提供exec命令,可以直接在容器内运行命令。
[root@localhost ~]# docker exec -it da84bcfe07be /bin/bash
[root@da84bcfe07be /]#
四、删除容器
使用docker rm命令来删除处于终止状态的容器。命令格式为docker rm[OPTIONS] CONTAINER [CONTAINER...]。支持的选项包括:
-f,--forece=false强行终止删除一个运行中的容器。
-l,--link=false删除容器的连接,但保留容器。
-v,--vloumes=false删除容器挂载的数据卷。
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
76c8b7c646ce mytomcat:4.0 "/bin/bash" 41 minutes ago Exited (0) 11 minutes ago goofy_nobel
da84bcfe07be mytomcat:4.0 "/bin/bash" About an hour ago Up 10 minutes gigantic_bohr
753f856bca45 mytomcat:4.0 "/bin/bash" 31 hours ago Exited (1) 8 hours ago sleepy_pike
dc668d3265fd centos "/bin/bash" 2 days ago Exited (1) 32 hours ago logdata
[root@localhost ~]# docker rm 76c8b7c646ce
76c8b7c646ce
删除一个运行中的容器,可以添加-f参数。Docker会发送SIGKILL信号给容器,终止其中的应用。
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da84bcfe07be mytomcat:4.0 "/bin/bash" About an hour ago Up 13 minutes gigantic_bohr
[root@localhost ~]# docker rm da84bcfe07be
Error response from daemon: You cannot remove a running container da84bcfe07be15092b711462990aae0371a703bfd8bbfb2e7d3a65e364279145. Stop the container before attempting removal or use -f
[root@localhost ~]# docker rm -f da84bcfe07be
da84bcfe07be
五、导入和导出容器
1、导出容器
导出容器是指导出一个已经创建的容器到一个文件,不管此时容器是否处于运行状态,可以使用docker export命令,该命令格式为docker export CONTAINER。
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
753f856bca45 mytomcat:4.0 "/bin/bash" 31 hours ago Exited (1) 8 hours ago sleepy_pike
dc668d3265fd centos "/bin/bash" 2 days ago Exited (1) 32 hours ago logdata
[root@localhost ~]# sudo docker export 753f856bca45 >mytomcat_4.0.tar
[root@localhost ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg mytomcat_4.0.tar software webapps
可将这些文件传输到其他机器上,在其他机器上通过导入命令实现容器的迁移。
2、导入容器
导入容器可以使用docker import命令导入,称为镜像。