跳转至

docker-compose

📌 准备工作

🚁 查端口是否被占用

netstat -an | findstr /i ":22"
# -n是禁止域名转换,即不进行DNS解析
lsof -n
# 或者
# 查看系统中所有处于监听状态的TCP端口,较新的linux中逐渐被lsof取代
netstat -tpln

🚁 准备镜像

FROM java:8
WORKDIR "/usr/local/myapp"
ADD myapp.jar .
EXPOSE 7080
CMD  java - jar  myapp.jar
docker build -f dockerfile -t whmmyapp .

docker login -u {username} -p {password} registry.cn-hangzhou.aliyuncs.com

docker push registry.cn-hangzhou.aliyuncs.com/{namespace}/whmmyapp

🚁 容器管理

使用portainer,可视化管理容器。

当然,docker desktop自带该功能。

docker run -id -p 9000:9000 \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
--name prtainer \
registry.cn-hangzhou.aliyuncs.com/{namespace}/portainer:v1

📌 docker-compose

仅使用docker命令拉取镜像,运行容器。

# 创建并运行mysql容器
docker run -id --name mysql -p 3306:3306 \
   -v /opt/mysql/data:/var/lib/mysql \
   -e MYSQL_ROOT_PASSWORD=whm \
   registry.cn-hangzhou.aliyuncs.com/{namespace}/db:v6 

# 创建并运行rabbitmq容器
docker run -id --name rabbitmq  \
   -p 5672:5672  \
   -p 15672:15672 \
   -p 15692:15692 \
   -v /opt/rabbitmq/data:/var/lib/rabbitmq  \
   -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest \
   registry.cn-hangzhou.aliyuncs.com/{namespace}/rabbitmq

# 创建并运行redis容器
docker run -id --name redis \
   -p 6379:6379 \
   -v /opt/redis/data:/data  \
   -v /etc/localtime:/etc/localtime:ro \
   registry.cn-hangzhou.aliyuncs.com/{namespace}/redis

# 创建并运行myapp的容器
docker run -id --name myapp \
   -p 7080:7080  \
   --link mysql \
   --link rabbitmq \
   --link redis:myRedis \
   -v /etc/localtime:/etc/localtime:ro \
   registry.cn-hangzhou.aliyuncs.com/{namespace}/myapp:3.0

当镜像间有依赖关系时(--link),则需要手动按顺序拉起容器,或者直接使用docker-compose

version: '3.3'  
services:
   mysql:
     image: registry.cn-hangzhou.aliyuncs.com/{namespace}/db:v6
     container_name: mysql
     volumes:
       - /opt/mysql/data:/var/lib/mysql
     restart: always
     ports:
       - "3306:3306"
     environment:
       MYSQL_ROOT_PASSWORD: whm

   rabbitmq:
     image: registry.cn-hangzhou.aliyuncs.com/{namespace}/rabbitmq
     container_name: rabbitmq
     volumes:
       - /opt/rabbitmq/data:/var/lib/rabbitmq
     restart: always
     ports:
       - "5672:5672"
       - "15672:15672"
       - "15692:15692"
     environment:
       RABBITMQ_DEFAULT_USER: guest
       RABBITMQ_DEFAULT_PASS: guest

   redis:
     image: registry.cn-hangzhou.aliyuncs.com/{namespace}/redis
     container_name: redis
     volumes:
       - /opt/redis/data:/data
     restart: always
     ports:
       - "6379:6379"

   myapp:
     depends_on:
       - mysql
       - rabbitmq
       - redis
     image: registry.cn-hangzhou.aliyuncs.com/{namespace}/myapp
     container_name: myapp
     links:
       - mysql:mysql
       - rabbitmq:rabbitmq
       - redis:myRedis
     ports:
       - "7080:7080"
     environment:
       - JAVA_OPTS=-Xmx450m -Xms450m -Xss256k
     restart: always
# 首次运行
docker compose -f docker-compose-myapp.yaml up -d

# 仅启动
docker compose -f docker-compose-myapp.yaml start