容器

#创建容器的时候指定启动参数,自动挂载localtime文件到容器内
docker run --name <name> -v /etc/localtime:/etc/localtime:ro
#杀死一个容器
docker kill Name or ID
#启动所有的容器
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
#关闭所有的容器
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)

#清理所有处于终止状态的容器
docker container prune
#在创建容器时添加该命令可以跟随Docker启动
docker run --restart=always
#如果已经启动了则可以使用如下命令:
docker update --restart=always <CONTAINER ID>
#进入容器
docker exec -it container_id bash #进入容器后开启新的终端
docker attach container_id #进入容器正在执行的终端
#删除静止状态的容器
docker container rm xxx
#强制删除容器
docker -rm -f CONTAINERID
#删除所有的容器
docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)
docker rm$(docker ps -a -q)

#查看所有已经创建的包括终止状态的容器
docker container ls -a
#查看容器日志
docker logs 容器
#查看某容器最后10行日志
sudo docker logs -f -t --tail 10 容器
#显示容器内运行的进程
docker top
#查看最后退出的容器的ID
docker ps -l
#查看容器详细信息
docker inspect container_id
#查看容器的变化
docker diff containerr_id
#查看容器占用系统资源
docker stats
#查看指定容器
docker stats --no-stream registry 1493

#从容器中复制文件到宿主机
docker cp 容器:/usr/local/test.js /tmp
#从宿主机复制文件到容器
docker cp /opt/test.js 容器:/usr/local/test.txt

镜像

#删除本地镜像;
docker image rm [选项] <镜像1> [<镜像2> ...]
#删除所有的镜像
docker rmi $(docker images | awk '{print $3}' |tail -n +2)
#删除所有不使用的镜像
docker image prune -f -a

#查看所有镜像
docker images
#搜索在线可用镜像名
docker search <镜像名>
#搜索Docker Hub上的镜像
ocker search jenkins
#查看镜像、容器、数据卷所占用的空间。
docker system df
#查看镜像的历史记录
docker history nginx:latest

#将容器的存储层保存下来成为镜像。在原有镜像的基础上, 再叠加上容器的存储层, 并构成新的镜像。 以后运行这个新镜像的时候, 就会拥有原有容器最后的文件变化。
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]

# 批量清理临时镜像文件
sudo docker rmi $(sudo docker images -q -f danging=true)

容器/镜像迁移

# 镜像导出:保留原镜像的名称和标签
docker save <IMAGE NAME>:<IMAGE TAG> > save.tar
# 镜像导出:不保留原镜像的基本信息,加载load后需执行tag命令重命名none镜像
docker save <IMAGE ID> > save.tar
#镜像导入
docker load < save.tar

#容器导出
docker export <CONTAINER ID> > export.tar
#容器导入
docker import export.tar <IMAGE NAME>:<IMAGE TAG>
#把一个正在运行的容器变成一个新的镜像。
docker commit <CONTAINER ID> <IMAGE NAME>:<IMAGE TAG>
#docker加载新的镜像后repository和tag名称都为none的解决方法
docker tag <IMAGE ID> <IMAGE NAME>:<IMAGE TAG>

save和export区别


  1. ​docker save​​​保存的是镜像(image),​​docker export​​保存的是容器(container);
  2. ​docker load​​​用来载入镜像包,​​docker import​​用来载入容器包,但两者都会恢复为镜像;
  3. ​docker load​​​不能对载入的镜像重命名,而​​docker import​​可以为镜像指定新名称。

常用服务部署

Jenkins

docker run -d --name jenkins \
-u root \
-v /home/dockerData/Jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 8080:8080 -p 50000:50000 \
jenkinsci/blueocean

MySQL

docker run --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-v /mydata/mysql/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=password \
-p 3306:3306 \
--privileged=true \
-d 192.168.3.210/test/mysql:8.0

version: '3.2'

services:
mysql:
image: mysql:8.0
volumes:
- type: volumes
source: /dockerData/mysql/log
target: /var/log/mysql
- type: volumes
source: /dockerData/mysql/data
target: /var/lib/mysql
- type: bind
source: /dockerData/mysql/conf
target: /etc/mysql
- type: volumes
source: /dockerData/mysql/mysql-files
target: /var/lib/mysql-files
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
privileged: true

Nginx

docker run --name nginx-test -p 7700:80 -d nginx

将容器内Nginx配置文件拷贝到主机

docker cp CONTAINER_ID:/etc/nginx/nginx.conf ~/nginx
docker cp COMTAINER_ID:/etc/nginx/conf.d/default.conf ~/nginx/conf.d

~/nginx tree
.
├── conf.d
│ └── default.conf
├── logs
│ ├── access.log
│ └── error.log
├── nginx.conf
└── html
└── index.html

修改配置文件​​~/nginx/conf.d/default.conf​

location / { 
//root /usr/share/nginx/html;
root /opt/www;
index index.html index.htm;
}

在​​~/nginx/www​​​目录下创建文件​​index.html​

<!DOCTYPE html>

<html>
<head>
<title>Docker Nginx</title>
</head>

<body>
Hello Nginx
</body>

</html>

重新启动nginx

docker run -d -p 7171:80 -p 7172:9090 \
--name nginx-3 \
-v /mydata/nginx-3/html:/usr/share/nginx/html \
-v /mydata/nginx-3/logs:/var/log/nginx \
-v /mydata/nginx-3/conf.d:/etc/nginx/conf.d \
-v /mydata/nginx-3/nginx.conf:/etc/nginx/nginx.conf \
-v /mydata/nginx-data:/usr/share/nginx/files \
nginx:1.17

容器外执行

docker exec nginx nginx -s reload
安装Tomcat
docker run --name vk-tomcat -d \
-p 8080:8080 \
-v /opt/tomcat/webapps:/usr/local/tomcat/webapps \
tomcat:8.5.51-jdk8-openjdk

参数详解

-D #默认false 允许调试模式(debugmode)
-H #默认是unix:///var/run/docker.sock tcp://[host[:port]]来绑定 或者unix://[/path/to/socket]来使用(二进制文件的时候),当主机ip host=[0.0.0.0],(端口)port=[4243] 或者 path=[/var/run/docker.sock]是缺省值,做为默认值来使用
-api-enable-cors #默认flase 允许CORS header远程api
-b #默认是空,附加在已存在的网桥上,如果是用'none'参数,就禁用了容器的网络
-bip #默认是空,使用提供的CIDR(ClasslessInter-Domain Routing-无类型域间选路)标记地址动态创建网桥(dcoker0),和-b参数冲突
-d #默认false 允许进程模式(daemonmode)
-dns #默认是空,使docker使用指定的DNS服务器
-g #默认是"/var/lib/docker":作为docker使用的根路径
-icc #默认true,允许inter-container来通信
-ip #默认"0.0.0.0":绑定容器端口的默认Ip地址
-iptables #默认true 禁用docker添加iptables规则
-mtu #默认1500 : 设置容器网络传输的最大单元(mtu)
-p #默认是/var/run/docker.pid进程pid使用的文件路径
-r #默认是true 重启之前运行的容器
-s #默认是空 ,这个是docker运行是使用一个指定的存储驱动器
--config string #客户端配置文件的位置(默认为“/root/.docker”)

docker run [option]

-a=map[]: 附加标准输入、输出或者错误输出
-c=0: 共享CPU格式(相对重要)
-cidfile="": 将容器的ID标识写入文件
-d=false: 分离模式,在后台运行容器,并且打印出容器ID
-e=[]:设置环境变量
-h="": 容器的主机名称
-i=false: 保持输入流开放即使没有附加输入流
-privileged=false: 给容器扩展的权限
-m="": 内存限制 (格式:, unit单位 = b, k, m or g)
-n=true: 允许镜像使用网络
-p=[]: 匹配镜像内的网络端口号
-rm=false:当容器退出时自动删除容器 (不能跟 -d一起使用)
-t=false: 分配一个伪造的终端输入
-u="": 用户名或者ID
-dns=[]: 自定义容器的DNS服务器
-v=[]: 创建一个挂载绑定:[host-dir]:[container-dir]:[rw|ro].如果容器目录丢失,docker会创建一个新的卷
-volumes-from="": 挂载容器所有的卷
-entrypoint="": 覆盖镜像设置默认的入口点
-w="": 工作目录内的容器
-lxc-conf=[]: 添加自定义-lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"
-sig-proxy=true: 代理接收所有进程信号(even in non-tty mode)
-expose=[]: 让你主机没有开放的端口
-link="": 连接到另一个容器(name:alias)
-name="": 分配容器的名称,如果没有指定就会随机生成一个
-P=false: Publish all exposed ports to thehost interfaces
公布所有显示的端口主机接口

部署kibanan

docker run -d --name kibana -p 5601:5601 -v /data/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.6.2