Docker学习笔记(三)-Docker-componse使用


一. 安装配置

1.1安装配置》CentOS7

清除旧版本

$ sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
######设置仓库
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$

######设置yum源是国内的
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

######安装docker
$ sudo yum install docker-ce docker-ce-cli containerd.io

######检查版本
$ docker version

$ sudo systemctl start docker
$
$ sudo docker run hello-world

# 开机启动
$ systemctl enable docker
  • 修改镜像(指修改国外源的意思,而不是 Docker 里的镜像 )
$ vi /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://registry.docker-cn.com"
    ],
    "insecure-registries":[
        "http://docker私服地址"
    ]
}
$ sudo systemctl restart docker

#验证是否修改成功
$ sudo docker info
## ......
Registry Mirrors:
 https://registry.docker-cn.com/
## ......

1.2 删除》CentOS7

yum -y remove containerd.io.x86_64;yum -y remove docker-ce.x86_64;yum -y remove docker-ce-cli.x86_64;
rm -rf /usr/bin/docker/;
rm -rf /etc/docker/;
rm -rf /var/lib/docker/;

二. 常用命令

2.1 命令》镜像相关

# 查看镜像
$ docker images
# 查看镜像详细信息
$ docker inspect showdoc
# 删除镜像
$ docker rmi showdoc

2.2 命令》容器相关

# 创建容器
$ docker create nginx:1.12
# 创建容器并命名
$ docker create --name nginx nginx:1.12
# 启动容器
$ docker start nginx
# 运行容器(创建+启动),-d作用为后台运行
$ docker run --name nginx -d nginx:1.12
# 查看运行中的容器
$ docker ps
# 查看所有容器
$ docker ps -a
# 停止容器
$ docker stop nginx
# 删除容器
$ docker rm nginx
# 进入容器执行命令,其中 -i ( --interactive ) 表示保持我们的输入流,只有使用它才能保证控制台程序能够正确识别我们的命令。而 -t ( --tty ) 表示启用一个伪终端,形成我们与 bash 的交互,如果没有它,我们无法看到 bash 内部的执行结果。
$ docker exec -it nginx bash
$ exit //退出
# 衔接到容器(容器中的主程序转为“前台”运行),我们可以通过 Ctrl + C 来向程序发送停止信号,让程序停止 ( 从而容器也会随之停止 ),用处不大
$ docker attach nginx
# 从容器向宿主机拷贝文件
$ sudo docker cp 3a55922b214b:/etc/mysql/mysql.cnf /home/elink/
# 查看容器日志
$ docker logs -f -t --tail 100 nginx:1.12
$ docker logs --tail 100 tml-hes
$ docker logs epark-samba
# 查询内存及CPU占用率
$ docker stats

2.3 命令》docker-compose

# 启动项目 -d:后台运行
$ sudo docker-compose up -d
# 删除项目
$ sudo docker-compose down

三. nexus私服

3.1 nexus私服》配置nexus

  1. 登录nexus,默认账户密码:admin admin123
  2. 界面上部齿轮形状的图标 》》 左侧Repositories 》》 Create repository 》》 docker(hosted)
  • hosted: 本地存储,即同 docker 官方仓库一样提供本地私服功能
  • proxy: 提供代理其他仓库的类型,如 docker 中央仓库
  • group: 组类型,实质作用是组合多个仓库为一个地址
  1. 填写私服名称 》》 勾选Create an HTTP connect…,配置端口号:5000 》》 勾选Enable Docker V1 Api 》》 Create Repository

3.2 nexus私服》配置docker

$ vi /etc/docker/daemon.json
# 填入
{ "insecure-registries":["http://docker私服地址"] }

$ sudo systemctl restart docker
# 验证是否修改成功
$ sudo docker info

$ sudo docker login -u admin -p admin123 docker私服地址

# 推送镜像
$ sudo docker tag mysql docker私服地址/mysql
$ sudo docker push docker私服地址/mysql:5.7
# 拉取镜像
$ sudo docker pull docker私服地址/nginx:1.16.0
# 搜索镜像
$ sudo docker search docker私服地址/nginx

四. docker-compose

4.1 docker-compose》安装

 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

sudo docker-compose version

docker-compose.yml应该和自己的应用在同一个目录下

image-20211123114514127

4.2 docker-compose》文件介绍

version: "3.7"   # docker-compose的版本号

# 配置网络,网络之间是相互隔离的
networks:
  water-gas-pre:
    name: water-gas-pre
    driver: bridge

# 配置服务
services:
  # 配置pg数据库,如果没有会自动创建
  postgres:
    image: postgres:10
    container_name: water-gas-postgres10-pre  # 容器名,自己起
    restart: always # 开机自启
    ports:
      - 5433:5432   # 宿主机端口:容器端口,注意如果同一个容器当中调用容器端口即可,多个项目注意宿主机端口不能一样
    volumes: 
      # 数据卷:宿主机上的data目录(/home/techen/water-gas-pre/postgresql/data),映射到容器内部的data(/var/lib/postgresql/data)目录
      - /home/techen/water-gas-pre/postgresql/data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=QAZqaz01
      - TZ=Asia/Shanghai
    networks:
      water-gas-pre:
        aliases:
          - water-gas-postgres10-pre
  mongo:
    image: mongo:4.4.6
    container_name: water-gas-mongo-pre
    restart: always
    ports:
      - 27019:27017
    volumes:
      - /home/techen/water-gas-pre/mongodb/data:/data/db
      - /home/techen/water-gas-pre/mongodb/logs:/var/log/mongodb
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=QAZqaz01
      - TZ=Asia/Shanghai
    command: ["--logpath", "/var/log/mongodb/mongodb.log"]  
    networks:
      water-gas-pre:
        aliases:
          - water-gas-mongo-pre
  redis:
    image: redis:5.0.10
    container_name: water-gas-redis5-pre
    restart: always
    ports:
      - 6380:6379
    volumes:
      - /home/techen/water-gas-pre/redis/redis.conf:/etc/redis/redis.conf
      - /home/techen/water-gas-pre/redis/data:/data
    environment:
      - TZ=Asia/Shanghai
    command: ["redis-server", "/etc/redis/redis.conf"]
    networks:
      water-gas-pre:
        aliases:
          - water-gas-redis5-pre
  rabbitmq:
    image: rabbitmq:3.8.3-management
    container_name: water-gas-rabbitmq-pre
    restart: always
    ports:
      - 15675:15672
      - 5675:5672
    environment:
      RABBITMQ_DEFAULT_USER: admin
      RABBITMQ_DEFAULT_PASS: QAZqaz01
      RABBITMQ_LOGS:
    volumes:
      - /home/techen/water-gas-pre/rabbitmq/data:/var/lib/rabbitmq
      # 启动前宿主机赋予/home/techen/water-gas/rabbitmq/logs访问权限
      - /home/techen/water-gas-pre/rabbitmq/logs:/var/log/rabbitmq
    networks:
      water-gas-pre:
        aliases:
          - water-gas-rabbitmq-pre
  ami-water-gas:
    image: java-app
    container_name: ami-water-gas-pre
    restart: always
    ports:
      - 8013:8012
    depends_on:
      - postgres
      - redis
    volumes:
      - /home/techen/water-gas-pre/ami-water-gas/ami-water-gas.jar:/home/project/ami-water-gas.jar:ro
      - /home/techen/water-gas-pre/ami-water-gas/logs:/root/logs/ami-water-gas
    entrypoint: "java -jar /home/project/ami-water-gas.jar FC11DAEDFB52BB1A336674CB61850974 --spring.profiles.active=pre"
    environment:
      - FILE_NAME=ami-water-gas
      - EXPOSE_PORT=8012
      - ACTIVE_ENV=pre
    networks:
      water-gas-pre:
        aliases:
          - ami-water-gas-pre
  tml-hes:
    image: java-app
    container_name: tml-hes-pre  # 容器名称
    restart: always
    ports:
      - 9098:9099
    depends_on:
      - redis
    volumes:  
	  # 宿主机的tml-hes.jar挂载到容器上去,使容器当中也有tml-hes.jar包
      - /home/techen/water-gas-pre/tml-hes/tml-hes.jar:/home/project/tml-hes.jar:ro
      # 实现宿主机和容器之间的目录共享,使容器当中的日志目录映射到宿主机上面(注意输出日志文件路径是/root/logs/tml-hes)
      - /home/techen/water-gas-pre/tml-hes/logs:/root/logs/tml-hes
    entrypoint: "java -jar /home/project/tml-hes.jar --spring.profiles.active=pre"
    environment:
      - FILE_NAME=tml-hes
      - EXPOSE_PORT=9099
      - ACTIVE_ENV=pre
    networks:
      water-gas-pre:
        aliases:
          - tml-hes-pre

  nb-hes:
    image: java-app
    container_name: nb-hes-pre
    restart: always
    ports:
      - 9092:9091
    volumes:
      - /home/techen/water-gas-pre/nb-hes/nb-hes.jar:/home/project/nb-hes.jar:ro
      - /home/techen/water-gas-pre/nb-hes/logs:/root/logs/nb-hes
    entrypoint: "java -jar /home/project/nb-hes.jar --spring.profiles.active=pre"
    environment:
      - FILE_NAME=nb-hes
      - EXPOSE_PORT=9091
      - ACTIVE_ENV=pre
    networks:
      water-gas-pre:
        aliases:
          - nb-hes-pre

4.3 基本概念

1、数据卷
数据卷的主要作用是数据共享,最常见的用法是将宿主机的某个目录或者文件挂载到容器当中,从而实现宿主机和容器之间的数据共享
    
2、ACTIVE_ENV
激活环境是哪个

docker-compose》启动顺序解决方案wait-for.sh


文章作者: superzqbo
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 superzqbo !
评论
  目录