Docker 容器化技术介绍(四) 之 Docker的安装与启动
Docker 容器化技术介绍(五) 之 Docker 镜像操作
Docker 容器化技术介绍(六) 之 Docker 容器操作
Docker 容器化技术介绍(七) 之 Docker 应用部署
Docker 容器化技术介绍(八) 之 Docker 备份与迁移
1 查看容器
查看正在运行的容器
docker ps
[root@bogon home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
列的介绍
名称 | 含义 |
CONTAINER ID | 容器的 ID |
IMAGE | 创建容器时所使用的镜像 |
COMMAND | 运行容器中的软件执行的命令 |
CREATED | 容器的创建时间 |
STATUS | 容器的状态: UP 表示运行状态 Exited 表示关闭状态 |
PORTS | 宿主机端口和容器中软件的端口的对应关系 |
NAMES | 容器的名称 |
查看所有的容器(包含了正在运行的容器以及之前启动过的容器)
docker ps -a
[root@bogon home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bff4ff3bd48a redis "docker-entrypoint..." 14 minutes ago Up 14 minutes 0.0.0.0:6379->6379/tcp th_docker_redis
5de5bd344823 nginx "nginx -g 'daemon ..." 17 minutes ago Up 17 minutes 0.0.0.0:80->80/tcp th_docker_nginx
7201b7a695c1 tomcat "catalina.sh run" 22 minutes ago Up 22 minutes 0.0.0.0:8099->8080/tcp th_docker_tomcat
289582afa5ad mysql "docker-entrypoint..." 42 minutes ago Up 42 minutes 33060/tcp, 0.0.0.0:33306->3306/tcp th_docker_mysql
查看最后一次运行的容器
docker ps -l
[root@bogon home]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bff4ff3bd48a redis "docker-entrypoint..." 15 minutes ago Up 15 minutes 0.0.0.0:6379->6379/tcp th_docker_redis
查看停止的容器
docker ps -f status=exited
[root@bogon home]# docker ps -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5de5bd344823 nginx "nginx -g 'daemon ..." 19 minutes ago Exited (0) 3 seconds ago th_docker_nginx
2 创建与启动容器
2.1创建容器参数介绍
创建容器的时候我们需要使用如下命令进行容器的创建
docker run
在创建容器的时候我需要使用一下参数.其中常用到的参数如下:
参数名称 | 参数含义 |
-i | 运行容器 |
-t | 表示容器启动后会进入其命令行,加入这两个参数后,容器创建就能登录进去;即分配一个伪终端 |
-d | 在 run 后面加上-d 参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t 两个参数,创建后 就会自动进去容器) |
--name | 为创建的容器命名 |
-v | 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v 做多个目录或文件映射;注意:最好 做目录映射,在宿主机上做修改,然后共享到容器上 |
-p | 表示端口映射,前者是宿主机端口,后者是容器内的映射端口;可以使用多个-p 做多个端口映射 |
-d 表示让容器在后台运行起来, -t 表示创建好容器以后我们就指定进行到容器中,进入到容器中以后我们就可以输入命令和容器进行交互. 既然如此,那么也就是说容器我们可以分为两类: 1. 交互式容器 2. 守护式容器
2.2 创建交互式容器
创建一个交互式容器并取名为 th_centos
docker run -it --name=th_centos centos /bin/bash
这样就可以直接运行到 th_centos 这个 docker 的容器里面了
[root@bogon home]# docker run -it --name=th_centos centos /bin/bash
[root@d8099a455a84 /]#
使用 ps 命令查看容器的状态,状态为 Up
[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
690301d8ba86 centos "/bin/bash" 8 seconds ago Up 7 seconds th_centos
使用 exit 退出容器
然后在查看容器状态,状态为 Exited
[root@bogon home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d8099a455a84 centos "/bin/bash" 5 minutes ago Exited (127) 3 minutes ago th_centos
我们容器也关闭了,这就是交互式容器的特点: 当我们推出容器以后,容器就关闭了
2.3 创建守护式容器
创建一个守护式容器:如果对于一个需要长期运行的容器来说,可以创建一个守护式容器。命令如下(容器名称不能重复):
docker run -id --name=th_centos_3 centos
[root@bogon home]# docker run -id --name=th_centos_3 centos
9938e58f17b5a601e9eb2c7eaf5edc27b3484d5778a24c63efa1029736735616
创建好容器以后,这个容器是以后台的方式运行的,那么需要操作容器就需要登录到容器中,可以使用如下命令进行登录
docker exec -it container_name (container_id) /bin/bash
[root@bogon home]# docker exec -it th_centos_3 /bin/bash
[root@9938e58f17b5 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@9938e58f17b5 /]# ps
PID TTY TIME CMD
7 ? 00:00:00 bash
22 ? 00:00:00 ps
退出以登录的容器,然后在查看容器的状态
[root@bogon home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9938e58f17b5 centos "/bin/bash" 2 minutes ago Up 2 minutes th_centos_3
发现容器还是处于运行状态,因此可以总结出守护式容器的特点: 即使退出容器以后,容器还是处于运行状态
3 停止与启动容器
关闭容器
docker stop $CONTAINER_NAME/ID
可以发现容器状态由 Up 转为 Exited
[root@bogon home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9938e58f17b5 centos "/bin/bash" 2 minutes ago Up 2 minutes th_centos_3
[root@bogon home]# docker stop th_centos_3
th_centos_3
[root@bogon home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9938e58f17b5 centos "/bin/bash" 4 minutes ago Exited (137) 7 seconds ago th_centos_3
启动已经关闭的容器
docker start $CONTAINER_NAME/ID
可以发现容器状态由 Exited 转为 Up
[root@bogon home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9938e58f17b5 centos "/bin/bash" 4 minutes ago Exited (137) 7 seconds ago th_centos_3
[root@bogon home]# docker start th_centos_3
th_centos_3
[root@bogon home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9938e58f17b5 centos "/bin/bash" 5 minutes ago Up 5 seconds th_centos_3
执行批量stop停止容器
xubinbin.5808@n226-201-061:~$ docker ps -a | awk '{print $1}'|xargs docker stop
135eea9d3262
9e447bde69f9
51fe3b604152
96150ea01aba
b81aeea8eecc
dd5e2f3f358e
978262406dd7
06d5df6ef604
47fadc55cef5
090509c25216
fa736e6b084c
f6cbd18584f0
d112a9038620
执行批量rm删除容器
xubinbin.5808@n226-201-061:~$ docker ps -a | awk '{print $1}'|xargs docker rm
135eea9d3262
9e447bde69f9
51fe3b604152
96150ea01aba
b81aeea8eecc
dd5e2f3f358e
978262406dd7
06d5df6ef604
47fadc55cef5
090509c25216
fa736e6b084c
f6cbd18584f0
d112a9038620
da1e325b81c1
4 文件拷贝
有的时候我们需要将某一个文件复制到容器中,然后在容器中进行时候,那么我们就需要了解一下如何进行文件的拷贝;
如果我们需要将文件拷贝到容器内可以使用 cp 命令
docker cp 宿主机对应的文件/或者目录 容器名称:容器目录
[root@bogon home]# docker cp /mtfs/media/1080P_daxiongtu_30fps_2D_30s.flv th_centos_3:/opt/
[root@bogon home]# docker exec -it th_centos_3 /bin/bash
[root@9938e58f17b5 /]# ls /opt -lh
total 11M
-rw-r--r-- 1 root root 11M Jun 14 03:27 1080P_daxiongtu_30fps_2D_30s.flv
我们也可以将容器中的某一个文件或者文件夹拷贝到宿主机上
docker cp 容器名称:容器目录 需要拷贝的文件或目录
[root@bogon home]# docker cp th_centos_3:/opt/1080P_daxiongtu_30fps_2D_30s.flv /home
[root@bogon home]# ls /home/
1080P_daxiongtu_30fps_2D_30s.flv th
5 目录挂载
在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样就可以通过修改宿主机某个目录的文件从而去影响容器;
命令的格式为: 创建容器 添加 -v 参数 后边为 宿主机目录:容器目录
docker run -id -v /mtfs/media/:/opt --name=th_centos_4 centos
然后进入容器中查看 /opt 目录下是否存在一个 /mtfs/media中的数据
[root@bogon home]# docker run -id -v /mtfs/media/:/opt --name=th_centos_4 centos
d2e756a08a0b6f1a5ded8a385cafe1614fdb3909723075025f79dd1882022304
[root@bogon home]# docker exec -it th_centos_4 /bin/bash
[root@d2e756a08a0b /]# ls /opt
1.flv 1080P_daxiongtu_30fps_2D_3600frames_an.flv 20180621_online_60min.flv ffmpeg-20180524.tar.gz out3.h264 testtf.flv
1.mp4 2.flv 20180627_cctv_5min.flv out.flv out_1080p.flv
[root@d2e756a08a0b /]#
拷贝文件到宿主机的 /mtfs/media 目录下看看在容器中同样可以看到该文件;
6 查看容器的 IP 地址
我们可以通过以下命令查看容器运行的各种数据
docker inspect th_centos_4
通过上述命令可以查看 docker 容器中很多的的信息,其中就包含了 ip 地址;( mount 挂载信息也可以看到 )
[root@bogon ~]# docker inspect th_centos_4
........... 略 .............
"Mounts": [
"Type": "bind",
"Source": "/mtfs/media",
"Destination": "/opt",
"NetworkSettings": {
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.6",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:06",
我们也可以使用如下命令过滤 ip 地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' th_centos_4
[root@bogon ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' th_centos_4
172.17.0.6
7 删除容器
删除指定的容器(只能删除关闭的容器)
docker rm $CONTAINER_ID/NAME
[root@bogon ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d2e756a08a0b centos "/bin/bash" 11 minutes ago Up 11 minutes th_centos_4
690301d8ba86 centos "/bin/bash" 37 minutes ago Exited (0) 36 minutes ago th_centos_2
[root@bogon ~]# docker rm th_centos_2
th_centos_2
[root@bogon ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d2e756a08a0b centos "/bin/bash" 11 minutes ago Up 11 minutes th_centos_4
删除所有的容器 (其中 docker ps -a -q 为提取 docker 中所以的 容器的 id 号 )
docker rm `docker ps -a -q`
8 实时查看 docker 容器的日志
docker logs -f -t --tail 行数 容器名
例:实时查看docker容器名为 th_ubuntu 的最后10行日志
docker logs -f -t --tail 10 th_ubuntu