容器部署
1、获取镜像 docker pull
命令格式:
docker pull [选项] [Docker Registry地址]<仓库名>:<标签>
选项可以通过 docker pull –help 查看
Docker Registry地址:<域名/IP>[:端口号]
默认地址是Docker Hub
仓库名:仓库名是两段式名称,既 <用户名>/<软件名> 。对于 Docker Hub,如果不给出用户名,则默认为 library ,也就是官方镜像。
下载tomcat镜像
docker pull hello-world
docker pull hub.c.163.com/public/tomcat:7.0.28
2、列出本地镜像 docker images
命令:docker images
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 9c7a54a9a43c 3 months ago 13.3kB
hub.c.163.com/public/tomcat 7.0.28 1d333f1d42a5 7 years ago 267MB
3、删除镜像 docker rmi
(1)删除镜像之前,先查看是否有容器在运行,若在运行,先
命令:docker stop CONNTAINER_ID/CONNTAINER_NAME
docker stop mytomcat
(2)再查看停止的容器
命令:docker ps -a
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0007d3656aff hello-world "/hello" 2 minutes ago Exited (0) 2 minutes ago vigilant_almeida
3cf4e179733d hub.c.163.com/public/tomcat:7.0.28 "/bin/sh -c '/etc/in…" 14 minutes ago Exited (137) About a minute ago mytomcat
(3)清除所有已经停止的容器
命令:docker rm $(docker ps -qa)
docker rm $(docker ps -qa)
(4)删除对应的镜像:
命令:docker rmi IMAGE_ID
docker rmi 9c7a54a9a43c
Untagged: hello-world:latest
Untagged: hello-world@sha256:dcba6daec718f547568c562956fa47e1b03673dd010fe6ee58ca806767031d1c
Deleted: sha256:9c7a54a9a43cca047013b82af109fe963fde787f63f9e016fdc3384500c2823d
Deleted: sha256:01bb4fce3eb1b56b05adf99504dafd31907a5aadac736e36b27595c8b92f07f1
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.c.163.com/public/tomcat 7.0.28 1d333f1d42a5 7 years ago 267MB
4、启动容器 docker run
(1)普通启动,容器执行完成之后就退出
docker run hello-world
(2)以交互式方式进入容器,添加 -t 创建终端,-i 交互模式
退出镜像终端使用ctrl+d,若不添加-d参数,退出/bin/bash之后,容器也就退出了。
docker run -d 守护状态运行
这样启动之后,退出/bin/bash之后,容器仍然运行。docker run -d实现dettach的作用,即对于你docker run的前台进程,该进程不对容器进行stdin,stdout,stderr的attach。
docker run -it -d hub.c.163.com/public/tomcat:7.0.28 bash
7cbdfe6f2795da6247b429a7454a2226fb3dcdc6779840d8d676644b738fa018
5、查看容器:docker ps
(1)查看运行的容器:
命令:docker ps
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7cbdfe6f2795 hub.c.163.com/public/tomcat:7.0.28 "/bin/sh -c '/etc/in…" 2 minutes ago Up 2 minutes 22/tcp, 8080/tcp naughty_gould
3cf4e179733d hub.c.163.com/public/tomcat:7.0.28 "/bin/sh -c '/etc/in…" 52 minutes ago Up 36 minutes 22/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp mytomcat
(2)查看所有的容器:
命令:docker ps -a
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7cbdfe6f2795 hub.c.163.com/public/tomcat:7.0.28 "/bin/sh -c '/etc/in…" 2 minutes ago Up 2 minutes 22/tcp, 8080/tcp naughty_gould
0375e220a15f hello-world "/hello" 3 minutes ago Exited (0) 3 minutes ago nostalgic_leakey
3cf4e179733d hub.c.163.com/public/tomcat:7.0.28 "/bin/sh -c '/etc/in…" 52 minutes ago Up 37 minutes 22/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp mytomcat
(3)只显示容器的id:
命令:docker ps -qa 或者 docker ps -q
docker ps -qa
7cbdfe6f2795
0375e220a15f
3cf4e179733d
docker ps -q
7cbdfe6f2795
3cf4e179733d
(4)删除已经停止的容器:
命令:docker rm $(docker ps -qa)
docker rm $(docker ps -qa)
0375e220a15f
Error response from daemon: You cannot remove a running container 7cbdfe6f2795da6247b429a7454a2226fb3dcdc6779840d8d676644b738fa018. Stop the container before attempting removal or force remove
Error response from daemon: You cannot remove a running container 3cf4e179733de0d365b56c9ac43fac3617872fc8c55e9b3a8aa81f5512f4e9e0. Stop the container before attempting removal or force remove
6、进入容器 docker exec
(1)通过CONTAINER_ID进入容器
命令:docker exec -it CONTAINER_ID/ CONTAINER_NAME bash
docker exec -it 3cf4e179733d bash
(2)通过CONTAINER_NAME进入容器,该name就是启动是–name的值
命令:docker exec -it CONTAINER_NAME bash
docker exec -it mytomcat bash
7、容器的启动、停止和重启: docker start | docker stop | docker restart
命令:docker start CONTAINER_ID/ CONTAINER_NAME // 启动一个容器
docker start mytomcat
命令:docker stop CONTAINER_ID/ CONTAINER_NAME // 停止一个容器
docker stop mytomcat
命令:docker restart CONTAINER_ID/ CONTAINER_NAME // 重启一个容器
docker restart mytomcat
8、常用操作
(1)获取容器日志 docker logs CONTAINER_ID
docker logs mytomcat
[....] Starting Tomcat servlet engine: tomcat7/var/run/tomcat7.pid
. ok
[....] Starting Tomcat servlet engine: tomcat7/var/run/tomcat7.pid
. ok
[....] Starting Tomcat servlet engine: tomcat7/var/run/tomcat7.pid
. ok
日志保存路径:/var/lib/docker/containers/ C O N T A I N E R I D / CONTAINER_ID/ CONTAINERID/CONTAINER_ID-json.log
(2)文件拷贝 docker cp
拷贝文件到宿主机()
命令:docker cp CONTAINER:SRC_DIRECTORY DES_DIRECTORY
docker cp mytomcat:/var/lib/tomcat7/webapps/ROOT ./
Successfully copied 5.63kB to /root/./
不管容器有没有启动,拷贝命令都会生效。
拷贝文件到容器
命令:docker cp SRC_DIRECTORY CONTAINER:DES_DIRECTORY
docker cp cour.war mytomcat:/var/lib/tomcat7/webapps/
Successfully copied 9.77MB to mytomcat:/var/lib/tomcat7/webapps/
(3)端口映射【启动容器时添加 -p参数】
当容器中运行一些网络应用,要让外部访问这些应用时,可以通过 -P 或 -p 参数两种方式来指定端口映射。
随机映射
使用 -P 参数时,Docker 会随机映射一个端口到内部容器开放的网络端口
docker run -it -P hub.c.163.com/public/tomcat:7.0.28 bash
指定端口
使用 -p 参数时,可以指定要映射的端口,并且在一个指定的端口上只可以绑定一个容器。
命令:docker run -p ip:hostPort:containerPort redis
宿主机IP和端口:ip:hostPort
容器端口:containerPort
docker run -d -it -p 8080:8080 hub.c.163.com/public/tomcat:7.0.28 bash
(4)映射宿主机目录到容器【启动容器时添加 -v参数】
docker的网络类型总共有5种网络类型,默认的类型是桥接模式,若希望使用其他网络模式,需要使用 –net切换网络模式。
none模式,容器不需要和外界通信时使用;
host模式,和宿主机共享一个网络,因此获得的IP和宿主机在同一个网段;
bridge模式
container模式
docker run -d -it --name "mytomcat" --net host hub.c.163.com/public/tomcat:7.0.28 bash
(5)容器名称设置 【启动容器时添加 –name参数】
–name指定启动容器的名称
docker run -d -it -p 8080:8080 --name "mytomcat" hub.c.163.com/public/tomcat:7.0.28 bash
(6)启动容器示例
映射文件目录:-v /home/docker/:/home/
使容器内支持GDB调试:–cap-add=SYS_PTRACE –security-opt seccomp=unconfined
指定网络模式为host:–net host
指定容器名称为:–name “mytomcat”
以交互模式进入容器:-it
容器以台运行模式启动:-d
docker run -d -it -p 8080:8080 --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --name "mytomcat" --net host -v /home/docker/code:/home/ocs90/src hub.c.163.com/public/tomcat:7.0.28 bash