docker学习记录

Docker

pmm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# admin
docker run -d --name=pmm --restart=always \
-p 2812:2812 -p 2813:80 -p 2814:443 \
--privileged=true \
percona/pmm-server:latest

# client
docker run -d --net=pxc_network \
--name pmm-client \
-v /etc/localtime:/etc/localtime \
-e PMM_AGENT_SERVER_ADDRESS=10.252.110.188:2814 \
-e PMM_AGENT_SERVER_USERNAME=admin \
-e PMM_AGENT_SERVER_PASSWORD=admin \
-e PMM_AGENT_SERVER_INSECURE_TLS=1 \
-e PMM_AGENT_SETUP=1 \
-e PMM_AGENT_CONFIG_FILE=config/pmm-agent.yaml \
percona/pmm-client:latest

pmm-admin add mysql --host=opalpxc3 --port=3306 --username=pmm --password=Mes_opal123 --service-name=pxc3

在安装pmm-client客户端的主机上,添加监控的MySQL实例

pmm-admin add mysql --username=username --password=password --tls --tls-skip-verify --tls-ca=pathtoca.pem --tls-cert=pathtocert.pem --tls-key=pathtocertkey.pem --server-url=http://admin:admin@172.16.130.12 --query-source=perfschema name 172.16.130.53:3308

pmm-admin add proxysql --host=10.252.110.183 --port=6033 --username=mes_opal --password=Mes_opal123 --service-name=proxysql



pmm-admin add mysql --query-source=perfschema --username=pmm --password=Mes_opal123 --service-name=client_pxc1 --host=10.252.110.180 --port=3306




docker exec -it pmm-client bash


#查询存在的节点
pmm-admin inventory list services --service-type=mysql

修改容器名

1
docker rename pmm-server pmm-server-old

设置日志大小

1
docker update --log-opt max-size=20m --log-opt max-file=30 <container-id>

自动重启容器

1
docker update --restart=always 容器ID(或者容器名)

docker镜像命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
docker version            #显示docker版本信息
docker info #显示docker的系统信息
docker 命令 --hepl #帮助命令

docker images #查询当前容器中的镜像

#搜索镜像
docker search 软件名

#下载镜像,默认下载最新版本---latest
docker pull 软件名
#指定版本下载
docker pull 软件名:版本号(指定把版本号时必须保证dockhub中存在)
https://hub.docker.com/


#删除镜像
docker rmi -f 软件名或者id,多个用空格隔开
#删除所有
docker rmi -f $(docker images)

docker容器命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#下载一个容器
docker pull centos

#启动一个容器
docker run [参数] 容器名

--name = "" #容器名称
-d #后台运行
-it #启动并且进入容器
-p #指定端口
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
不指定则随机端口
--rm #用完即删,用于测试

#运行nginx,指定名称为nginx1,后台方式运行,指定主机端口3344,容器端口80
docker run -d --name nginx1 -p 3344:80 nginx

#进入正在运行的容器
docker exec -it 容器id #进入容器
docker attach 容器id #进入容器正在执行的终端


#查询运行的容器
docker ps []
-a #查询运行过的容器
-n = 1 #显示指定个数

#退出容器
exit #退出并且停止
ctrl+p+q #退出不停止

#删除容器
docker rm 容器id或名称
-f #强制删除,无论是否运行

#查看容器的占用情况
docker stats 容器id

#启动容器
docker start 容器id
#停止容器
docker stop 容器id
#重启容器
docker restart 容器id
#强制停止
docker kill 容器id

查看日志

1
2
3
docker logs [参数] 容器id
-ft #显示所有日志以及时间戳
--tail 10 #显示10行

查看容器中的进程

1
docker top 容器id

从容器内拷贝到主机

1
docker cp 容器id:文件路径    主机路径

测试

1
2
#安装nginx
docker pull nginx

可视化(portsiner)文档

1
2
3
4
5
#官方文档
[文档](https://docs.portainer.io/start/install/agent/docker/linux)

#安装命令
docker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent:latest

commit镜像

1
2
3
docker commit -a cb e146099b156 tomcatcb:1.0
-a #提交作者名称
-m #提交的内容注释

容器数据卷

指定路径挂载

  • 将容器中的数据挂载到主机中,其实就是容器的持久化和同步
1
2
3
4
docker run -it -v 主机目录:容器目录

#将tomcat的webapps目录挂载到主机中
docker run -d -p 3344:8080 -v /root/tomcat/:/usr/local/tomcat/webapps tomcatcb:1.0

匿名挂载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#-v时不指定主机目录
docker run -d -p 3344:8080 --name niming-tomcat -v /usr/local/tomcat/webapps tomcatcb:1.0

#查看镜像配置
docker inspect niming-tomcat

"Mounts": [
{
"Type": "volume",
"Name": "9001da5b9732a3a17890977ed04e38eedf3db29573c606f674df2673f95b6d37",
"Source":
#这里目录为随机目录
"/var/lib/docker/volumes/9001da5b9732a3a17890977ed04e38eedf3db29573c606f674df2673f95b6d37/_data",
"Destination": "/usr/local/tomcat/webapps",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]

具名挂载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#-v时指定一个主机名称而不指定目录
docker run -d --name jvanming-tomcat -p 3302:8080 -v jvanming-tomcat:/usr/local/tomcat/webapps tomcatcb:1.0


#查看镜像配置
docker inspect jvanming-tomcat

"Mounts": [
{
"Type": "volume",
"Name": "jvanming-tomcat",
"Source": "/var/lib/docker/volumes/jvanming-tomcat/_data", #这里目录为我们指定的目录
"Destination": "/usr/local/tomcat/webapps",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
]

扩展

1
2
3
4
5
6
#还可以指定权限
docker run -v jvming:/etc:[ro|rw]

ro readOnly 只读
rw readWrite 可读可写
如果为只读那么容器中的配置文件无法修改,只能主机来修改

安装MySQL并且将数据文件挂载到主机中

1
2
3
4
5
6
7
8
9
# 1.下载mysql
docker pull mysql:8

# 2.启动
docker run -d -p 3308:3306
-v /root/dockerData/mysql/conf:/etc/mysql/conf.d #指定挂载目录,配置文件
-v /root/dockerData/mysql/data:/var/lib/mysql #指定挂载目录,数据库文件
-e MYSQL_ROOT_PASSWORD=123456 #指定连接密码
--name mysql01 mysql:8 #指定版本

DockerFile

1
2
3
4
5
6
7
8
9
10
FROM            # 基础镜像
MAINTAINER # 指定镜像作者
RUN # 镜像构建是需要运行的命令
ADD # 添加内容
WORDDIR # 镜像工作目录
VOLOME # 挂载的目录
EXPOSE # 端口
ONBUILD # 继承镜像时执行该命令
COPY # 类似add。将文件拷贝到镜像中
ENV # 设置环境变量

配置tomcat环境的DockerFile脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 1. 编写dockerfile脚本
from centos:8 #初始容器centos8

maintainer chenbo #作者名称

copy readme.txt /usr/local/ #拷贝文件

add apache-tomcat-8.5.79.tar.gz /usr/local #添加依赖
add jdk-8u333-linux-x64.tar.gz /usr/local #添加依赖

workdir /usr/local #工作目录

env JAVA_HOME /usr/local/jdk1.8.0_333 #配置环境变量
env CLASSPATH $JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib

env CATALINA_HOME /usr/local/apache-tomcat-8.5.79
env CATALINA_BASH /usr/local/apache-tomcat-8.5.79

env PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_BASH/bin

expose 8080 #端口


#启动tomcat脚本
cmd /usr/local/apache-tomcat-8.5.79/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.79/logs/log.out

# 2.编译脚本文件
#-t指定镜像名称和版本 -f指定脚本文件 .指定当前目录
docker build -t mytomcat-diy:1.0 -f my-tomcat-test .

# 启动镜像
docker run -d -p 8080:8080 --name chenbotomcatdiy -v /root/dockerData/my-tomcat/jar/:/usr/local/apache-tomcat-8.5.79/webapps/test -v /root/dockerData/my-tomcat/logs:/usr/local/apache-tomcat-8.5.79/logs -it mytomcat-diy:1.0

提交到远程仓库

1
docker 

docker-compose

  • 容器编排技术

compose相关命令

1
2
3
4
5
6
7
8
9
10
11
12
13
# 查看当前正在运行的项目
docker-compose ps
# 创建并启动容器
docker-compose up
-f #指定docker-compose文件位置,不指定默认当前位置
-p #指定项目名称,默认目录名
-d #后台运行
# 构建容器
docker-compose build
# 停止
docker-compose down
# 验证并查看 Compose 文件,有错误时会提示行号
docker-compose config
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
version: "3"
services:
nginx:
image: nginx:1.21.6
ports:
- "8022:80"
volumes:
- "/docker-project-data/nginx/nginx.conf:/etc/nginx/nginx.conf"

rabbitmq:
image: rabbitmq:3.10.2-management
ports:
- "5672:5672"
- "15672:15672"
environment:
- RABBITMQ_DEFAULT_USER:guest
- RABBITMQ_DEFAULT_PASS:guest
- loopback_users:none #远程访问
volumes:
- "/docker-project-data/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf"

redis:
image: redis:7.0.0
ports:
- "6381:6379"
volumes:
- "/docker-project-data/redis/redis.conf:/usr/local/etc/redis/redis.conf"
- "/docker-project-data/redis/data:/data"
environment:
- “appendonly=yes” #数据持久化
command:
--requirepass "123456" #这一行是设置密码

mysql:
image: mysql:8
ports:
- "3307:3306"
volumes:
- "/docker-project-data/mysql/conf.d:/etc/mysql/conf.d" #指定挂载目录,配置文件
- "/docker-project-data/mysql/data:/var/lib/mysql" #指定挂载目录,数据库文件
environment:
- MYSQL_ROOT_PASSWORD:"123456"

jar:
image: chendd1314/getwebdata-dockerfile:1.0
volumes:
- "/docker-project-data/jar/log/:/log/"
ports:
- "9091:9091"

centos:
image: c

镜像和容器的导入导出

1
2
3
4
5
# 导出
docker save -o 指定路径 指定镜像名称

# 导入
docker load -i 镜像路径

==容器导入导出==

1
2
3
4
5
#导出
docker export -o 文件全路径 镜像名称

# 导入
docker import 文件全路径

导出是文件后缀为tar

save保存的是镜像,export保存的是容器
load用来载入镜像包,import用来载入容器包,但两者都会恢复为镜像
load不能对载入的镜像重命名,而import可以为镜像指定新名称
load不能载入容器包,import能载入镜像包,但不能使用

1
sudo docker run --name xxl-job-admin -d -p 8090:8090 -v /home/datadisk/xxl-job-admin/config/application.properties:/application.properties -v /home/datadisk/xxl-job-admin/log:/data/applogs  xuxueli/xxl-job-admin