借助Docker DockerCompose Dockerfile 部署服务
注意:以下操作环境为Centos7
1、Docker安装
-
必要安装
yum -y install yum-utils device-mapper-persistent-data lvm2 -
配置国内源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -
安装
-
可使用以下命令查看版本列表
yum list docker-ce --showduplicates | sort -r
由于repo中默认只开启stable仓库,故这里安装的是最新稳定版
yum install docker-ce -
-
启动
systemctl start docker -
开机自启
systemctl enable docker -
验证
# 简单信息 docker -v # 查看docker的版本号,包括客户端、服务端、依赖的Go等 docker version # 查看系统(docker)层面信息,包括管理的images, containers数等 docker info -
成功示例
[root@iZa7l019nmh1l8bfjuy6liZ ~]# docker version Client: Version: 1.13.1 API version: 1.26 Package version: docker-1.13.1-208.git7d71120.el7_9.x86_64 Go version: go1.10.3 Git commit: 7d71120/1.13.1 Built: Mon Jun 7 15:36:09 2021 OS/Arch: linux/amd64 Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Package version: docker-1.13.1-208.git7d71120.el7_9.x86_64 Go version: go1.10.3 Git commit: 7d71120/1.13.1 Built: Mon Jun 7 15:36:09 2021 OS/Arch: linux/amd64 Experimental: false [root@iZa7l019nmh1l8bfjuy6liZ ~]#
2、DockerCompose安装
-
下载(GitHub拉取,速度可能会比较慢!误躁~)
注意1.24.1这个版本号,可根据需要变更!!!
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose -
安装
chmod +x /usr/local/bin/docker-compose -
验证
docker-compose version -
成功示例
[root@iZa7l019nmh1l8bfjuy6liZ ~]# docker-compose version docker-compose version 1.20.0, build ca8d3c6 docker-py version: 3.1.3 CPython version: 3.6.4 OpenSSL version: OpenSSL 1.0.1t 3 May 2016 [root@iZa7l019nmh1l8bfjuy6liZ ~]# -
常用操作命令
#前台运行容器 docker-compose up #后台运行容器 docker-compose up -d #停止并释放容器 docker-compose down #查看日志 docker-compose 欧根纱- #启动、停止、重启容器 docker-compose start docker-compose stop docker-compose restart
3、Dockerfile介绍
Docker通过Dockerfile来自动构建需要的镜像,Dockerfile文件是一个包含了用于组建需要镜像的文本文件,文件内容都是由一条一条的指令组成。
Dockerfile分为以下几部分:
FROM
MAINTAINER
RUN, ADD, COPY...
CMD, ENTRYPOINT
下面具体来看看:
FROM
# 指明构建的镜像来自于哪个基础镜像,后续所有的操作都基于此镜像,必须要有!!
# 示例:FROM centos:7
MAINTAINER
# 指定镜像的作者信息
# 示例:MAINTAINER houzx "houzxkf@163.com"
RUN
# 用于执行一条命令;Dockerfile的指令每执行一次都会在docker上新建一层,
# 所以无意义的层,会造成镜像膨胀过大;可以利用&&符合来连接命令,这样只会创建一层
# 示例: RUN cd /opt \
# && wget -O https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.86/bin/apache-tomcat-8.5.86.tar.gz \
# && tar -zxvf apache-tomcat-8.5.86.tar.gz
CMD
# 启动容器时执行的shell命令,类似于RUN命令,但是二者执行时间点不同
# CMD 在docker run的时候运行
# RUN 在docker build的时候运行
# 其支持shell、exec两种形式的语法
# shell格式 CMD command param1 param2
# exec格式[推荐] CMD ["command", "param1", "param2"]
# 示例:CMD ["tar", "-zxvf", "apache-tomcat-8.5.86.tar.gz"]
EXPOSE
# 声明容器运行可能会用到的端口,此处仅是声明端口
# 作用:
# 1、帮助镜像使用者理解这个景象服务的守护端口,以便配置映射
# 2、在运行时使用随机端口映射时,即docker run -P时,会自动随机映射EXPOSE端口
# 示例:EXPOSE 8080
ENV
# 设置环境变量,定义了环境变量,就能在后续指令中使用这个环境变量
# 示例:ENV JAVA_HOME=/usr/local/java/jdk1.8.0_181
COPY
# 拷贝文件或目录到镜像的目录中,支持通配符,例如:
# 示例: COPY hom* /mydir/
# 示例:COPY hom?.txt /mydir/
ADD
# 与COPY的使用方式一致,不同的是,ADD在gzip, bzip2,即xz的情况下,会自动复制并解压到目标路径
# 示例:ADD jdk-8u181-linux-x64.tar.gz /usr/local/java
ENTRYPOINT
# 类似于CMD命令,也支持两种方式,但是不会被docker run的命令行参数覆盖。
# 但是如果执行docker run 的时候指定了 --entrypoint 选项,此选项参数会覆盖ENTRYPOINT指令定义的程序
# 如果Dockerfile中存在多个ENTRYPOINT指令,仅最后一个生效
# 示例:ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh", "run"]
VOLUME
# 指定容器挂载点到宿主机自动生成的目录或其他容器,在启动容器docker run的时候,可通过 -v 参数修改挂载点
# 示例:VOLUME ["/data1","/data2"]
USER
# 用于指定执行后续命令的用户和用户组
# 示例:USER <用户名>[:<用户组>]
WORKDIR
# 为Dockerfile中的任何 RUN、CMD、ENTRYPOINT、COPY 和 ADD指令设置工作目录
# 如果镜像中对应的路径不存在,会自动创建此目录
# 一般用 WORKDIR 来替代 切换目录进行操作的指令
# 示例:WORKDIR /usr/local
-
使用Dockerfile自定义镜像并上传到中央仓库
#1、切换到Dockerfile文件所在目录 ➜ cd <DockerfilePath> #2、执行build命令,实例: ➜ docker build -t jdk8-tomcat8:1.0 . [+] Building 0.3s (10/10) FINISHED => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 1.21kB 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/centos:7 0.0s => [internal] load build context 0.0s => => transferring context: 617B 0.0s => [1/5] FROM docker.io/library/centos:7 0.0s => CACHED [2/5] WORKDIR /usr/local 0.0s => CACHED [3/5] ADD jdk-8u181-linux-x64.tar.gz /usr/local/java 0.0s => CACHED [4/5] ADD apache-tomcat-8.5.81.tar.gz /usr/local 0.0s => CACHED [5/5] RUN mv apache-tomcat-8.5.81 tomcat 0.0s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:2f4b87f4c1742956a5d07539b92c6371758d7858be02c 0.0s => => naming to docker.io/library/jdk8-tomcat8:1.0 0.0s #3、查看生成的镜像,实例: ➜ docker images | grep jdk8-tomcat8 houzx/jdk8-tomcat8 1.0 2f4b87f4c174 41 hours ago 615MB jdk8-tomcat8 1.0 2f4b87f4c174 41 hours ago 615MB #4、登录hub.docker.com账户,实例: ➜ docker login -u houzx Password: Login Succeeded #5、打标签,实例: ➜ docker tag jdk8-tomcat8:1.0 houzx/jdk8-tomcat8:1.0 #6、推送,实例: ➜ docker push houzx/jdk8-tomcat8:1.0 #7、登录hub.docker.com查看
4、[选] 部署Minio服务
此处只是根据实际情况编写操作手册,详细介绍可查看官方介绍
-
编写docker-compose.yml文件
version: '3.3' services: minio: image: minio/minio hostname: minio container_name: minio ports: - "9000:9000" #api端口 - "9001:9001" #控制台端口 environment: TZ: Asia/Shanghai MINIO_ACCESS_KEY: admin MINIO_SECRET_KEY: minio_admin #大于等于8位 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 volumes: - /home/minio/data:/data - /home/minio/config:/root/.minio/ command: server --console-address ':9001' /data privileged: true restart: always -
为Minio设置Nginx代理
请参考网址:为Minio设置Nginx代理
5、[选] 部署Redis服务
-
编写docker-compose.yml文件
version: '3.3' services: redis: image: redis hostname: redis container_name: redis volumes: - /home/redis/data:/data - /home/redis/logs:/logs - /home/redis/redis.conf:/etc/redis/redis.conf ports: - 6379:6379 environment: TZ: Asia/Shanghai command: redis-server /etc/redis/redis.conf restart: always
6、[选] 部署SpringBoot服务
-
编写docker-compose.yml文件
version: '3.3' services: xxx-boot: image: houzx/jdk8:1.0 container_name: xxx-boot volumes: - /home/springboot/xxx:/springboot ports: - "20900:9000" restart: always environment: TZ: Asia/Shanghai command: - /bin/bash - -c - | cd /springboot java -Dfile.encoding=utf-8 -jar xxx-boot-1.0.0.jar --spring.profiles.active=prod
7、[选] 部署SpringWeb服务
-
编写docker-compose.yml文件
version: '3.3' services: xxx-web: image: houzx/jdk8-tomcat8:1.0 container_name: xxx-web volumes: - /home/tomcat/xxx/webapps:/usr/local/tomcat/webapps - /home/logs/xxx:/home/logs - /home/data/xxx:/home/data ports: - "20800:8080" restart: always environment: TZ: Asia/Shanghai