docker-compose使用操作

218 阅读5分钟

docker安装

1.准备

Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上

Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本

yum update -y
#查看内核版本
cat /etc/redhat-release

2.  Docker安装

Linux-Centos7.4

2.1 卸载

#查询安装过的包
yum list installed | grep docker 

#删除安装的软件包
yum -y remove docker.x86_64
yum -y remove docker-client.x86_64
yum -y remove docker-common.x86_64
#删除镜像/容器等
rm -rf /var/lib/docker

2.2 安装

# step 1: 安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
yum makecache fast
yum -y install docker-ce

# Step 4: 开启Docker服务
service docker start 
#停止
service docker stop
#开机启动
systemctl enable docker 
#开机启动
systemctl start docker 
#查看信息
docker info 
#查看版本
docker version
#安装前查看仓库中的版本
yum list docker-ce --showduplicates | sort -r 
yum list docker-engine –showduplicates

2.3 踩坑

踩坑: 查看有无 /etc/docker/daemon.json ,若无则需要手动创建

踩坑:failed: iptables...... 需要关闭防火墙 sytemctl disable firewalld

Linux关闭防火墙命令-腾讯云开发者社区-腾讯云

踩坑: 系统版本过低,不支持overlay2存储驱动,改为devicemapper

prior storage driver overlay2 failed: overlay2: the backing xfs filesystem is formatted without d_type support

Use the OverlayFS storage driver

需要:linux 内核版本 Version 4.0 or higher of the Linux kernel, or RHEL or CentOS using version 3.10.0-514 of the kernel or higher.

解决:

sudo systemctl stop docker

vi /etc/docker/daemon.json
# 加入如下参数:
 {
   "storage-driver": "devicemapper"
 }

3.配置镜像加速

镜像加速器:cr.console.aliyun.com/#/accelerat…

加速地址可以上阿里云申请,比一般的快点;
也可用网易源:hub-mirror.c.163.com/

#针对Docker客户端版本大于 1.10.0 的用户
# 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF

#刷新配置
sudo systemctl daemon-reload
sudo systemctl restart docker

#镜像拉取测试
docker pull centos

Docker-Compose

compose主要用于开发/测试场合,适合小规模应用的部署, 并不适合生产环境使用

1. 安装

下载docker-compose-Linux-x86_64文件,国内下载地址

#复制到linux下 /usr/local/bin并改名为docker-compose
[root@smsr ~]#mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose

#赋权
[root@smsr ~]#chmod +x /usr/local/bin/docker-compose

#查看版本
[root@smsr ~]#docker-compose -v

2. 命令

注意:docker-compose命令必须在docker-compose.yml文件同目录下执行

#修改文件后需要重新build,本地创建镜像
[root@smsr ~]#docker-compose build

#创建并启动容器,第一次可以直接up,可以跳过build环节,
[root@smsr ~]#docker-compose up –d --build

#关闭并删除容器
[root@smsr ~]#docker-compose down

#开启服务
[root@smsr ~]#docker-compose start

#停止服务
[root@smsr ~]#docker-compose stop

#重启服务
[root@smsr ~]#docker-compose restart

#删除服务中的各个容器
[root@smsr ~]#docker-compose rm

#显示容器
[root@smsr ~]#docker-compose ps

#显示容器中的输出内容
[root@smsr ~]#docker-compose logs

3. 导入镜像

[root@smsr ~]# docker load –i  镜像名.tar

4. mysql+redis+springboot+nginx

导入相关镜像后,在目录下创建docker-compose.yml文件,之后的相关操作都依赖该文件

[root@smsr ~]# vi docker-compose.yml

进入vim界面后,按Insert键,进入编辑模式,把下面docker-compose.yml内容右键复制进去。
然后按Esc键退出编辑,输入:wq!,回车保存文件即可。

docker-compose.yml:

version : '3'

services:

  mysql:
    image: mysql:5.7
    container_name: mysql
    expose:
      - "3306"
    environment:
      MYSQL_DATABASE: test
      MYSQL_ROOT_PASSWORD: root
      MYSQL_ROOT_HOST: '%'
    restart: always
    
  redis:
    image: redis:3.0.3
    container_name: redis
    restart: always
    expose:
      - "6379"
     
  springboot:
    image: springboot
    restart: always
    container_name: springboot
    expose:
      - "8083"
    environment:
      - spring.profiles.active=test 
      - TZ=Asia/Shanghai
    depends_on:
      - mysql
      - redis
      
  nginx: 
    image: mynginx
    container_name: mynginx
    restart: always
    ports:
      - "80:80"
    depends_on:
      - springboot

version:  使用第几代语法来编写文件

services:  表示该文件管理启停的服务

image:  指定启动容器的镜像,镜像仓库/标签或者镜像id

container_name:  该服务自定义容器名称

restart:  服务重启策略,指定为always时,容器总是重新启动。no是默认的重启策略,在任何情 况下都不会重启容器。

expose:  暴露端口,但不映射到宿主机,只被连接的服务访问。端口为内部端口

ports:  暴露端口信息。使用宿主:容器 (HOST:CONTAINER)格式

environment:  添加环境变量,mysql中的环境变量为数据库名,数据库密码等。
springboot两个环境变量分别是指定工程运行环境和运行时区
可以在这里添加环境变量覆盖工程中的相应配置,如添加cacheType=jvm可以覆盖工程中的cacheType=redis配置

depends_on:  服务依赖,指定服务之间的依赖关系,表示需要先启动depends_on下面的服务后,再启动本服务。工程中可以使用依赖的服务名代替相关IP信息

工程配置文件:

spring.datasource.url=jdbc:mysql://mysql:3306/test?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.redis.hostName=redis
spring.redis.port=6379    
spring.redis.pool.maxActive=1024    
spring.redis.pool.maxWait=1000    
spring.redis.pool.maxIdle=200
spring.redis.timeout=0

nginx配置文件:

upstream webapp{
 server springboot:8083 max_fails=3 fail_timeout=20s;  
} 
 server {
     listen       80 default_server;
     listen       [::]:80 default_server;
     server_name  _;
     location /{
     proxy_pass http://webapp/;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection keep-alive;
     proxy_set_header Host $host;
     proxy_cache_bypass $http_upgrade;
     }
 }

network_mode:  当需要获取主机信息时如MAC等,可以选择主机模式,此时容器使用和主机同一网络,此时不可使用depends_on中的依赖服务名代替相关IP信息,因所有容器都处于主机网络,可用localhost代替相关IP信息。

#桥接模式
network_mode: "bridge"

#主机模式
network_mode: "host"

#无网络模式(稍后可自定义)
network_mode: "none"

#与指定服务同网络
network_mode: "service:[service name]"

#与指定容器同网络
network_mode: "container:[container name/id]"

注意:后面可以使用up、down等指令启停全部服务。

相关文章

docker-compose

使用docker-compose 大杀器来部署服务 上

docker-compose教程(安装,使用, 快速入门)

Spring Boot 2.0(五):Docker Compose + Spring Boot + Nginx + Mysql 实践

Docker-Compose 一键部署Ningx+.Net Core+Redis集群

docker-compose.yml文件详解

Docker Compose 配置文件 Docker-Compose.yml 文件详解