Docker是一种轻量级的虚拟化技术,它允许开发人员将应用程序及其依赖项打包到一个可移植的容器中,便于部署和运行。
x1# 移除旧版本
2yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
3
4# 配置 docker yum 源
5yum install -y yum-utils
6yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
7
8# 安装docker
9yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
10
11# 启动&开机启动
12systemctl enable docker --now
13
14# 配置加速
15mkdir -p /etc/docker
16vim /etc/docker/daemon.json
17{
18 "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
19}
20systemctl daemon-reload
21systemctl restart docker
22
23# 启动一个MySql
24docker run -d -p 3306:3306 \
25 -v /app/myconf:/etc/mysql/conf.d \
26 -v /app/mydata:/var/lib/mysql \
27 -e MYSQL_ROOT_PASSWORD=123456 \
28 mysql:8.0.37-debian
29
221# 搜索镜像
2docker search nginx
3
4# 下载镜像
5docker pull nginx
6
7# 下载指定版本镜像
8docker pull nginx:1.26.0
9
10# 查看所有镜像
11docker images
12
13# 删除指定id的镜像
14docker rmi e784f4560448
15docker rmi bde7d154a67f 94543a6c1aef e784f4560448
16
17# 查看镜像构建历史
18docker image history nginx
19
20# 查看镜像详情
21docker image inspect nginx
22
401# 查看所有容器
2docker ps -a
3
4# 查看运⾏中的容器
5docker ps
6
7# 运⾏⼀个新容器
8docker run nginx
9
10# 停⽌容器
11docker stop keen_blackwell
12
13# 启动容器
14docker start 592
15
16# 重启容器
17docker restart 592
18
19# 查看容器资源占⽤情况
20docker stats 592
21
22# 查看容器⽇志
23docker logs 592
24
25# 删除指定容器
26docker rm 592
27docker rm -f $(docker ps -aq)
28
29# 强制删除指定容器
30docker rm -f 592
31
32# 后台启动容器
33docker run -d --name mynginx nginx
34
35# 后台启动并暴露端⼝
36docker run -d --name mynginx -p 80:80 nginx
37
38# 进⼊容器内部
39docker exec -it mynginx /bin/bash
40
171# 文件发布
2# 提交容器变化打成⼀个新的镜像
3docker commit -m "update index.html" mynginx mynginx:v1.0
4# 保存镜像为指定⽂件
5docker save -o mynginx.tar mynginx:v1.0
6# 加载镜像
7docker load -i mynginx.tar
8
9# DcokerHub发布
10# 登录
11docker hub
12docker login
13# 重新给镜像打标签
14docker tag mynginx:v1.0 leifengyang/mynginx:v1.0
15# 推送镜像
16docker push leifengyang/mynginx:v1.0
17
111 # 映射数据目录和配置目录
2 docker run -d -p 99:80 \
3 -v /app/nghtml:/usr/share/nginx/html \ # 使用“⽬录挂载”映射数据目录(目录默认为空)
4 -v ngconf:/etc/nginx \ # 使用“卷映射”映射配置目录(目录默认为容器内部目录文件)
5 --name app03 nginx
6
7# docker卷操作
8docker volume ls
9docker volume create volume01
10docker volume inspect ngconf
11
231# ⾃定义Dcoker⽹络
2docker network create mynet
3
4# 使用Dcoker⽹络建立Redis主从集群
5# 主节点
6docker run -d -p 6379:6379 \
7 -v /app/rd1:/bitnami/redis/data \
8 -e REDIS_REPLICATION_MODE=master \
9 -e REDIS_PASSWORD=123456 \
10 --network mynet --name redis01 \
11 bitnami/redis
12
13# 从节点
14docker run -d -p 6380:6379 \
15 -v /app/rd2:/bitnami/redis/data \
16 -e REDIS_REPLICATION_MODE=slave \
17 -e REDIS_MASTER_HOST=redis01 \
18 -e REDIS_MASTER_PORT_NUMBER=6379 \
19 -e REDIS_MASTER_PASSWORD=123456 \
20 -e REDIS_PASSWORD=123456 \
21 --network mynet --name redis02 \
22 bitnami/redis
23
Docker Compose 是用于定义和运行多容器应用程序的工具。 它是解锁简化和高效的开发和部署体验的关键。
参考文档:
61# 上线
2docker compose -f compose.yml up -d
3
4# 下线
5docker compose -f compose.yml down # 移除网络和容器,不移除卷
6docker compose -f compose.yml down --rmi all -v # 移除网络和容器,并移除卷
641# compose.yml
2
3# 名称
4name myblog
5
6# 服务列表
7services
8
9# 数据库
10 mysql
11 # 名称
12 container_name mysql
13 # 镜像
14 image mysql8.0
15 # 端口映射
16 ports
17"3306:3306"
18 # 配置信息
19 environment
20 MYSQL_ROOT_PASSWORD=123456
21 MYSQL_DATABASE=wordpress
22 # 卷映射(注意:使用的卷需在根节点声明)
23 volumes
24 mysql-data:/var/lib/mysql
25 /app/myconf:/etc/mysql/conf.d
26 # 开机自启
27 restart always
28 # 加入的网络
29 networks
30 blog
31
32# 博客应用
33 wordpress
34 # 镜像
35 image wordpress
36 # 端口映射
37 ports
38"8080:80"
39 # 配置信息
40 environment
41 WORDPRESS_DB_HOST mysql
42 WORDPRESS_DB_USER root
43 WORDPRESS_DB_PASSWORD123456
44 WORDPRESS_DB_NAME wordpress
45 # 卷映射(注意:使用的卷需在根节点声明)
46 volumes
47 wordpress:/var/www/html
48 # 开机自启
49 restart always
50 # 加入的网络
51 networks
52 blog
53 # 依赖的服务
54 depends_on
55 mysql
56
57# 卷映射声明
58volumes
59 mysql-data
60 wordpress
61
62# Docker网络
63networks
64 blog
161#Disable memory paging and swapping performance
2sudo swapoff -a
3
4# Edit the sysctl config file
5sudo vi /etc/sysctl.conf
6
7# Add a line to define the desired value
8# or change the value if the key exists,
9# and then save your changes.
10vm.max_map_count=262144
11
12# Reload the kernel parameters using sysctl
13sudo sysctl -p
14
15# Verify that the change was applied by checking the value
16cat /proc/sys/vm/max_map_count
准备一个 compose.yml
文件,内容如下:
2461name devsoft
2services
3 redis
4 image bitnami/redis latest
5 restart always
6 container_name redis
7 environment
8 REDIS_PASSWORD=123456
9 ports
10'6379:6379'
11 volumes
12 redis-data:/bitnami/redis/data
13 redis-conf:/opt/bitnami/redis/mounted-etc
14 /etc/localtime:/etc/localtime:ro
15
16 mysql
17 image mysql8.0.31
18 restart always
19 container_name mysql
20 environment
21 MYSQL_ROOT_PASSWORD=123456
22 ports
23'3306:3306'
24'33060:33060'
25 volumes
26 mysql-conf:/etc/mysql/conf.d
27 mysql-data:/var/lib/mysql
28 /etc/localtime:/etc/localtime:ro
29
30 rabbit
31 image rabbitmq 3-management
32 restart always
33 container_name rabbitmq
34 ports
35"5672:5672"
36"15672:15672"
37 environment
38 RABBITMQ_DEFAULT_USER=rabbit
39 RABBITMQ_DEFAULT_PASS=rabbit
40 RABBITMQ_DEFAULT_VHOST=dev
41 volumes
42 rabbit-data:/var/lib/rabbitmq
43 rabbit-app:/etc/rabbitmq
44 /etc/localtime:/etc/localtime:ro
45 opensearch-node1
46 image opensearchproject/opensearch2.13.0
47 container_name opensearch-node1
48 environment
49# Name the cluster cluster.name=opensearch-cluster
50# Name the node that will run in this container node.name=opensearch-node1
51# Nodes to look for when discovering the cluster discovery.seed_hosts=opensearch-node1,opensearch-node2
52# Nodes eligibile to serve as cluster manager cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2
53# Disable JVM heap memory swapping bootstrap.memory_lock=true
54"OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # Set min and max JVM heap sizes to at least 50% of system RAM
55"DISABLE_INSTALL_DEMO_CONFIG=true" # Prevents execution of bundled demo script which installs demo certificates and security configurations to OpenSearch
56"DISABLE_SECURITY_PLUGIN=true" # Disables Security plugin
57 ulimits
58 memlock
59 soft -1 # Set memlock to unlimited (no soft or hard limit)
60 hard-1
61 nofile
62 soft 65536 # Maximum number of open files for the opensearch user - set to at least 65536
63 hard65536
64 volumes
65# Creates volume called opensearch-data1 and mounts it to the container opensearch-data1:/usr/share/opensearch/data
66 /etc/localtime:/etc/localtime:ro
67 ports
68# REST API 9200:9200
69# Performance Analyzer 9600:9600
70
71 opensearch-node2
72 image opensearchproject/opensearch2.13.0
73 container_name opensearch-node2
74 environment
75# Name the cluster cluster.name=opensearch-cluster
76# Name the node that will run in this container node.name=opensearch-node2
77# Nodes to look for when discovering the cluster discovery.seed_hosts=opensearch-node1,opensearch-node2
78# Nodes eligibile to serve as cluster manager cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2
79# Disable JVM heap memory swapping bootstrap.memory_lock=true
80"OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # Set min and max JVM heap sizes to at least 50% of system RAM
81"DISABLE_INSTALL_DEMO_CONFIG=true" # Prevents execution of bundled demo script which installs demo certificates and security configurations to OpenSearch
82"DISABLE_SECURITY_PLUGIN=true" # Disables Security plugin
83 ulimits
84 memlock
85 soft -1 # Set memlock to unlimited (no soft or hard limit)
86 hard-1
87 nofile
88 soft 65536 # Maximum number of open files for the opensearch user - set to at least 65536
89 hard65536
90 volumes
91 /etc/localtime:/etc/localtime:ro
92# Creates volume called opensearch-data2 and mounts it to the container opensearch-data2:/usr/share/opensearch/data
93
94 opensearch-dashboards
95 image opensearchproject/opensearch-dashboards2.13.0
96 container_name opensearch-dashboards
97 ports
98# Map host port 5601 to container port 5601 5601:5601
99 expose
100"5601" # Expose port 5601 for web access to OpenSearch Dashboards
101 environment
102'OPENSEARCH_HOSTS=["http://opensearch-node1:9200","http://opensearch-node2:9200"]'
103"DISABLE_SECURITY_DASHBOARDS_PLUGIN=true" # disables security dashboards plugin in OpenSearch Dashboards
104 volumes
105 /etc/localtime:/etc/localtime:ro
106 zookeeper
107 image bitnami/zookeeper3.9
108 container_name zookeeper
109 restart always
110 ports
111"2181:2181"
112 volumes
113"zookeeper_data:/bitnami"
114 /etc/localtime:/etc/localtime:ro
115 environment
116 ALLOW_ANONYMOUS_LOGIN=yes
117
118 kafka
119 image'bitnami/kafka:3.4'
120 container_name kafka
121 restart always
122 hostname kafka
123 ports
124'9092:9092'
125'9094:9094'
126 environment
127 KAFKA_CFG_NODE_ID=0
128 KAFKA_CFG_PROCESS_ROLES=controller,broker
129 KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://0.0.0.0:9094
130 KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://119.45.147.122:9094
131 KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT
132 KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
133 KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
134 ALLOW_PLAINTEXT_LISTENER=yes
135"KAFKA_HEAP_OPTS=-Xmx512m -Xms512m"
136 volumes
137 kafka-conf:/bitnami/kafka/config
138 kafka-data:/bitnami/kafka/data
139 /etc/localtime:/etc/localtime:ro
140 kafka-ui
141 container_name kafka-ui
142 image provectuslabs/kafka-ui latest
143 restart always
144 ports
145 8080:8080
146 environment
147 DYNAMIC_CONFIG_ENABLEDtrue
148 KAFKA_CLUSTERS_0_NAME kafka-dev
149 KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS kafka9092
150 volumes
151 kafkaui-app:/etc/kafkaui
152 /etc/localtime:/etc/localtime:ro
153
154 nacos
155 image nacos/nacos-server v2.3.1
156 container_name nacos
157 ports
158 8848:8848
159 9848:9848
160 environment
161 PREFER_HOST_MODE=hostname
162 MODE=standalone
163 JVM_XMX=512m
164 JVM_XMS=512m
165 SPRING_DATASOURCE_PLATFORM=mysql
166 MYSQL_SERVICE_HOST=nacos-mysql
167 MYSQL_SERVICE_DB_NAME=nacos_devtest
168 MYSQL_SERVICE_PORT=3306
169 MYSQL_SERVICE_USER=nacos
170 MYSQL_SERVICE_PASSWORD=nacos
171 MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
172 NACOS_AUTH_IDENTITY_KEY=2222
173 NACOS_AUTH_IDENTITY_VALUE=2xxx
174 NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789
175 NACOS_AUTH_ENABLE=true
176 volumes
177 /app/nacos/standalone-logs/:/home/nacos/logs
178 /etc/localtime:/etc/localtime:ro
179 depends_on
180 nacos-mysql
181 condition service_healthy
182 nacos-mysql
183 container_name nacos-mysql
184 build
185 context.
186 dockerfile_inline
187 FROM mysql:8.0.31
188 ADD https://raw.githubusercontent.com/alibaba/nacos/2.3.2/distribution/conf/mysql-schema.sql /docker-entrypoint-initdb.d/nacos-mysql.sql
189 RUN chown -R mysql:mysql /docker-entrypoint-initdb.d/nacos-mysql.sql
190 EXPOSE 3306
191 CMD ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
192 image nacos/mysql8.0.30
193 environment
194 MYSQL_ROOT_PASSWORD=root
195 MYSQL_DATABASE=nacos_devtest
196 MYSQL_USER=nacos
197 MYSQL_PASSWORD=nacos
198 LANG=C.UTF-8
199 volumes
200 nacos-mysqldata:/var/lib/mysql
201 /etc/localtime:/etc/localtime:ro
202 ports
203"13306:3306"
204 healthcheck
205 test "CMD" "mysqladmin" "ping" "-h" "localhost"
206 interval 5s
207 timeout 10s
208 retries10
209 prometheus
210 image prom/prometheus v2.52.0
211 container_name prometheus
212 restart always
213 ports
214 9090:9090
215 volumes
216 prometheus-data:/prometheus
217 prometheus-conf:/etc/prometheus
218 /etc/localtime:/etc/localtime:ro
219
220 grafana
221 image grafana/grafana10.4.2
222 container_name grafana
223 restart always
224 ports
225 3000:3000
226 volumes
227 grafana-data:/var/lib/grafana
228 /etc/localtime:/etc/localtime:ro
229
230volumes
231 redis-data
232 redis-conf
233 mysql-conf
234 mysql-data
235 rabbit-data
236 rabbit-app
237 opensearch-data1
238 opensearch-data2
239 nacos-mysqldata
240 zookeeper_data
241 kafka-conf
242 kafka-data
243 kafkaui-app
244 prometheus-data
245 prometheus-conf
246 grafana-data
注意:
- 将
kafka
的119.45.147.122
改为你自己的服务器IP。
21# 在 compose.yaml 文件所在的目录下执行
2docker compose -f compose.yml up -d
组件(容器名) | 介绍 | 访问地址 | 账号/密码 | 特性 |
---|---|---|---|---|
Redis(redis) | k-v 库 | 你的ip:6379 | 单密码模式:123456 | 已开启AOF |
MySQL(mysql) | 数据库 | 你的ip:3306 | root/123456 | 默认utf8mb4字符集 |
Rabbit(rabbit) | 消息队列 | 你的ip:15672 | rabbit/rabbit | 暴露5672和15672端口 |
OpenSearch(opensearch-node1/2) | 检索引擎 | 你的ip:9200 | 内存512mb;两个节点 | |
opensearch-dashboards | search可视化 | 你的ip:5601 | ||
Zookeeper(zookeeper) | 分布式协调 | 你的ip:2181 | 允许匿名登录 | |
kafka(kafka) | 消息队列 | 你的ip:9092 外部访问:9094 | 占用内存512mb | |
kafka-ui(kafka-ui) | kafka可视化 | 你的ip:8080 | ||
nacos(nacos) | 注册/配置中心 | 你的ip:8848 | nacos/nacos | 持久化数据到MySQL |
nacos-mysql(nacos-mysql) | nacos配套数据库 | 你的ip:13306 | root/root | |
prometheus(prometheus) | 时序数据库 | 你的ip:9090 | ||
grafana(grafana) | 你的ip:3000 | admin/admin |
Dockerfile 是 Docker 镜像的构建描述文件,常用指令如下:
指令 | 描述 |
---|---|
ADD | 添加本地或远程文件和目录。 |
ARG | 使用构建时变量。 |
CMD | 指定 default 命令。 |
COPY | 复制文件和目录。 |
ENTRYPOINT | 指定默认可执行文件。 |
ENV | 设置环境变量。 |
EXPOSE | 描述您的应用程序正在侦听的端口。 |
FROM | 从基础映像创建新的构建阶段。 |
HEALTHCHECK | 在启动时检查容器的运行状况。 |
LABEL | 将元数据添加到图像中。 |
MAINTAINER | 指定图像的作者。 |
ONBUILD | 指定何时在构建中使用映像的说明。 |
RUN | 执行生成命令。 |
SHELL | 设置镜像的默认 shell。 |
STOPSIGNAL | 指定退出容器的系统调用信号。 |
USER | 设置用户和组 ID。 |
VOLUME | 创建卷挂载。 |
WORKDIR | 更改工作目录。 |
参考文档:
Dockerfile reference | Docker Docs
31# 构建镜像(注意:最后有一个点,表示基于当前目录构建对象)
2docker build -f Dockerfile -t myjavaapp:v1.0 .
3
141# 基础环境
2FROM openjdk:17
3
4# 标签
5LABEL author=leifengyang
6
7# 拷贝文件
8COPY app.jar /app.jar
9
10# 暴露端口
11EXPOSE 8080
12
13# 启动命令
14ENTRYPOINT ["java","-jar","/app.jar"]