Docker 命令手册
Docker 基本信息
查看docker的环境信息
- docker info
Client:
Debug Mode: false
Server:
Containers: 13
Running: 0
Paused: 0
Stopped: 13
Images: 11
Server Version: 18.09.8
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-957.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 7.638GiB
Name: centos.7
ID: ENUP:FRWW:DLYA:HYWF:P2L4:QN65:E5MZ:H3U2:QCWT:GV7M:AWQM:QKSR
Docker Root Dir: /cloud/docker
Debug Mode: false
Username: smhwzf
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine
备注:如上结果比较清晰不做过多解释,唯一注明:Docker Root Dir 是在daemon中设置了-g 参数
查看docker及API对应信息
- docker version
Client: Docker Engine - Community
Version: 19.03.8
API version: 1.39 (downgraded from 1.40)
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:27:04 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.8
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: 0dd43dd
Built: Wed Jul 17 17:10:42 2019
OS/Arch: linux/amd64
Experimental: false
- 备注:正常情况下,Client和Server应该有一样的信息,如上信息的输出,由于安装了两个版本,并且没有卸载干净导致
镜像操作类
搜索镜像
命令:docker search
样例:docker search mysql –no-trunc=true
备注:
搜索mysql镜像,不要截断日志
拉取镜像
命令:docker pull registry:latest 或者如下命令等效
docker pull registry
备注:
拉取最新版本的registry镜像
查询本地镜像
命令: docker images
镜像打标签
命令:docker tag
样例:docker tag 141d24fea983 mysql:5.6
备注:
141d24fea983 为mysql镜像的ID
删除镜像
命令:docker rmi
样例:docker rmi mysql:5.6
备注:
5.6为mysql的版本,也就是tag
导出镜像
命令:docker save
样例:docker save -o registry-2.0.tar 10.1.163.22:5000/registry:2.0
备注:
-o 表示导出
registry-2.0.tar 表示导出到本地的包名
导入镜像
命令:docker load
样例:docker load -i registry-2.0.tar
备注:
-i 表示导入
registry-2.0.tar 存在本机的镜像tar包
容器操作类
创建容器
命令:docker create
样例:docker create busybox:1.24-uclibc
备注:
busybox:1.24-uclibc 镜像名称,如果您时初学者,请提前拉到本地
启动容器
命令:docker start
样例:docker start 77eb8d8a0b0a
备注:
77eb8d8a0b0a 通过docker create创建的容器
运行容器
命令:docker run
样例:docker run -itd --network host -p 5000:5000 -v /registry:/data/registry --name registry-2 registry:2.0
备注:
-v 表示目录映射,以":"号分割,前面的时宿主机目录,后面的时容器内目录
查看容器
命令:docker ps
样例:docker ps -a -s
备注:
-a 表示查看所有的容器,包括已经退出的
-s 容器大小;size-可写层大小;virtual-共享只读层大小+可写层大小
查看容器日志
命令:docker logs
样例:docker logs 容器id
查看最后100行日志
- docker logs --tail 100 容器id
输出100行日志,并动态展示最新日志
- docker logs --tail 100 -f 容器id
查询最近20分钟的日志
- docker logs --since 20m 容器id
查询最近3个小时的日志
- docker logs --since 3h 容器id
查询从2020年1月1日12点开始的日志
- docker logs --since "2020-01-01T12:00:00" 容器id
打印日志的详细时间
- docker logs --since "2020-01-01T12:00:00" -t 容器id
查询到2020年1月1日12点截止的日志(2020年1月1日12点之前的日志)
- docker logs --until "2020-01-01T12:00:00" 容器id 备注:在API 1.35中支持
进入容器
命令:docker exec
样例:docker exec -it b991e7560c22 /bin/sh
备注:
-it 打开 pseudo-TTY交互式标准输入
b991e7560c22 容器ID
停止容器
命令:docker stop
样例:docker stop b991e7560c22
备注:
b991e7560c22 容器ID
杀掉容器
命令:docker kill
样例:docker kill b991e7560c22
备注:
b991e7560c22 容器ID
与docker stop的区别是:kill更暴力,直接杀,stop会发送term信号给容器
删除容器
命令:docker rm
样例:docker rm b991e7560c22
备注:
b991e7560c22 容器ID,如果容器处于运行中,不允许删除,如果非要强制删除,先不告诉你,这么干很危险
查看容器详情
命令:docker inspect
样例:docker inspect b991e7560c22
备注:
b991e7560c22 容器ID
查看容器状态
命令:docker stats
样例:docker stats
备注:
显示所有容器的资源使用情况
查看日志驱动
docker info --format '{{.LoggingDriver}}'
查看当前容器的日志驱动
docker inspect -f '{{.HostConfig.LogConfig.Type}}' <CONTAINER>
导出容器
命令:docker export
样例:docker export -o nginx-paas-1.0-c.tar 2866b6fa6e25
备注:
2866b6fa6e25 容器ID
export 与save的区别:export将容器导出为一个文件,丢失所有元数据和历史纪录;save会保存所有的历史纪录
导入容器
命令:docker import
样例:docker import nginx-paas-1.0-c.tar 10.1.163.22:5000/nginx-paas:1.0
备注:
nginx-paas-1.0-c.tar 本地tar包
10.1.163.22:5000/nginx-paas:1.0 镜像名称
import与load的区别:load从save保存的文件导入为一个新的镜像;import 从import导出的文件导入为一个新的镜像
场景演练
部署基于tomcat的应用,通过ngnx做负载均衡,后端访问mysql数据库,所有组件全部运行与docker容器中。
- 技术组件
Nginx:负载均衡 Tomcat:应用运行环境,应用war包: Mysql:支撑应用的数据库
- 部署拓扑如下
nginx 容器化
- 获取镜像
命令 | 备注 |
---|---|
docker pull nginx | 获取基础镜像 |
docker tag 66216d141be6 nginx:1.0 | 重新命名 |
cd /data/abner/images/nginx | |
docker build –t nginx-paas:1.0 . | 构建镜像 |
docker run -itd -p 19090:9090 nginx-paas:1.0 | 启动nginx容器 |
- 构建自己的Nginx镜像
nginx Dockerfile
FROM 10.1.163.22:5000/nginx:1.0
ADD nginx.conf /etc/nginx
RUN chmod +x /etc/nginx/nginx.conf
EXPOSE 9090
CMD ["nginx", "-c","/etc/nginx/nginx.conf","-g", "daemon off;"]
其中,nginx.conf文件如下:
user nginx;
worker_processes 1;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
upstream lb.tomcat.com {
server 10.1.163.27:18080 weight=1;
server 10.1.163.32:18080 weight=1;
}
server {
listen 9090;
server_name 10.1.163.22;
location / {
root html;
index index.html index.htm;
proxy_pass http://lb.tomcat.com;
}
}
}
tomcat容器化
运行在10.1.163.32上的为原生的tomcat(包含自带测试war包),名字:10.1.163.22:5000/tomcat:8.5
运行在10.1.163.27上的为基于原生tomcat构建的新的tomcat,名字: 10.1.163.22:5000/tomcat-27:8.5
备注:
再构建新的tomcat镜像:10.1.163.22:5000/tomcat-27:8.5的原因如下;
* 明确怎么编写tomcat的Dockerfile构建tomcat镜像;
* 在nginx做负载均衡可以区别10.1.163.32上的tomcat;
* 10.1.163.27上访问tomcat会显示自己的IP地址。
- 启动容器
在10.1.163.22主机上执行
命令 | 备注 |
---|---|
docker pull tomcat | 获取基础镜像 |
docker tag 0fbedce2f08c 10.1.163.22:5000/tomcat:8.5 | 镜像重命名 |
docker push 10.1.163.22:5000/tomcat:8.5 | 推入仓库 |
docker run -itd -p 18080:8080 10.1.163.22:5000/tomcat:8.5 | 启动tomcat容器 |
在10.1.163.32主机上执行
命令 | 备注 |
---|---|
docker pull 10.1.163.22:5000/tomcat:8.5 | 获取基础镜像 |
docker run -itd -p 18080:8080 10.1.163.22:5000/tomcat:8.5 | 启动tomcat容器 |
在10.1.163.27上执行
命令 | 备注 |
---|---|
docker pull 10.1.163.22:5000/tomcat:8.5 | 获取基础镜像 |
cd /data/abner/tomcat/ && docker build –t 10.1.163.22:5000/tomcat-27:8.5 | 重新命名 |
docker run -itd -p 18080:8080 10.1.163.22:5000/tomcat:8.5 | 启动tomcat容器 |
- tomcat Dockerfile 文件内容
FROM 10.1.163.22:5000/tomcat:8.5
ADD index.html /usr/local/tomcat/webapps/examples
RUN chmod +x /usr/local/tomcat/webapps/examples/index.html
expose 8080
- index.html 文件内容
<title>
tomcat-8.5
</title>
<head>
10.1.163.27
</head>
<body>
<h1> I am running in docker</h1>
</body>
Mysql 容器化
命令 | 备注 |
---|---|
docker pull percona | 获取dockerhub的percona版本mysql镜像 |
docker tag 888d359bd25f 10.1.163.22:5000/percona-mysql:5.7 | 重命名便于推入仓库 |
docker run -itd -e DATADIR=/data/mysql_data -p 13306:3306 -e MYSQL_ROOT_PASSWORD=Abner@123 -e MYSQL_USER=trd -e MYSQL_PASSWORD=Trd@123 -v /data/mysql_data:/data/mysql_data --name paas-mysql 10.1.163.22:5000/percona-mysql:5.7 | 启动数据库,用户名/密码:root/Abner@123 用户名/密码:trd/Trd@123 |