Docker的概念及基本指令学习---全

  • 一、Docker的安装(centos7环境下)
  • 二、Docker管理
    • (1)核心概念:
    • (2)Docker镜像管理(使用官方仓库)
    • (3)Docker容器管理
    • (4)Docker网络管理
  • 三、docker file ( 利用docker file 创建一个自己的镜像,产品给客户部署 )
  • 四、docker 服务编排
    • docker-compose命令
    • docker compose 网络管理
  • 五、docker CI部署样例
  • 六、docker集群
    • (1)Docker Swarm 配置准备以及部署
    • (2)管理节点

一、Docker的安装(centos7环境下)

  1. 检查当前系统中是否已经安装过docker软件
yum list  installed  docker
  1. 如果已经安装过了docker 需要卸载到目前系统中的docker
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
  1. 安装docker依赖的软件包
    yum-utils:主要用于仓库管理,在安装docker之前需要设置对应的仓库,所以需要安装yum-utils工具包
    device-mapper:docker使用的自己的存储管理,所以需要使用device-mapper-persistent-data 以及 lvm2工具包完成内部存储和物理磁盘分区之间的映射关系管理
 yum install -y yum-utils \  device-mapper-persistent-data \  lvm2
  1. 设置docker存储库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 检查仓库中docker的版本信息
 yum list docker-ce --showduplicates | sort -r
  1. 安装docker
    docker-ce :docker的主体程序
    docker-cli: docker工具
    containerd.io:容器管理
yum install docker-ce docker-ce-cli containerd.io
  1. 启动docker服务
systemctl start docker
  1. 验证docker安装结果
docker info

二、Docker管理

(1)核心概念:

仓库, 注册服务器、镜像,标签,容器,Dockerfile,compose file (容器编排)

注意:

  1. 注册服务器可以包含若干个仓库,默认使用docker hub(官方的仓库
    hub.docker.com),国内的注册服务器主要包括阿里云、腾讯云、网易云等。没有特殊要求的场景下默认使用官网的仓库最好。
  2. 仓库是一批镜像的合集。仓库的命名通常为 (注册服务器)/(仓库名) 例如:private-docker.com/centeros
    可以理解为 private-docker.com这个服务器下有一个centeros仓库,这个仓库中可以包含若干个版本的centOS的镜像
  3. 镜像是一个模版,能够启动多个容器,在市场用,通常会存在有两大种类的镜像官方镜像以及第三方镜像,建议使用的时候需要注意,最好使用官方的镜像。
  4. 仓库 + 标签能确定唯一一个镜像
  5. 容器是通过镜像启动的一个虚拟环境
  6. Dockerfile是一个文件,其中规定了制作一个镜像的流程,能够打包镜像
  7. compose file是一个编排文件,里面编排了一个或多个镜像的启动参数,启动后会产生一个或多个容器

(2)Docker镜像管理(使用官方仓库)

  • 在官方市场中查看相关的镜像有两种方式:第一可以采用网页方式登录 hub.docker.com然后在页面进行搜索
  • 使用docker cli 提供的命令来完成相关操作。

docker search [镜像的名字] 例如:docker search mysql 查看当前仓库中mysql镜像的相关信息。但是需要注意的是,使用docker命令无法查看版本,需要看tag的话要到官方站点来查询
docker pull [镜像名称]:[tag] 例如:docker pull mysql:5.7 docker pull mysql 如果不使用tag 则默认采用最后一个版本
docker imagesdocker image ls 查看当前本地docker中已经下载的镜像信息
docker rmi 镜像:tag 删除一个镜像(需要注意镜像如果有容器正在运行,需要先删除容器后在删除镜像)
docker tag 原镜像名 新镜像名 拷贝镜像 原镜像不需要后可以删除掉

(3)Docker容器管理

  1. 查询目前系统中的容器信息
查看启动了的
docker  ps
查看全部
​docker ps -a
  1. 使用镜像启动容器

例如:docker run nginx 使用nginx镜像启用一个容器(这种启用方式默认会占用当前终端,用户无法进行后续操作),为了解决此类问题我们可以附加参数更好地控制容器:

参数名称 说明
-d 让docker 容器在后台运行
-P 使用随机的宿主机端口映射容器端口
-p 使用指定端口映射内容端口 -p 宿主机端口:docker 端口
-e 参数名=参数值 向容器传递参数
-v 挂载数据目录
  1. 容器日志查看
代码 说明
docker logs 容器名 展示容器日志
docker logs -f 容器名 跟踪容器日志
docker logs --tail 10 或者 docker logs -n 10 从日志的末尾显示日志
docker logs -t 显示日志时间戳
docker logs -t --since=“2021-06-02T13:03:00Z” abc 显示指定时间之后的日志
docker logs -t --until=“2021-06-02T13:03:00Z” abc 显示指定时间之前的日志
docker logs abc greap Chrome
  1. 容器控制
代码 说明
docker stop 容器名 停止容器
docker start 容器名 启动容器
docker pause 容器名 暂停一个容器运行
docker unpause 容器名 恢复一个容器运行
docker restart 容器名 重启一个容器
docker rm 容器名 删除一个容器

(4)Docker网络管理

使用docker network ls 查看docker目前支持的网络。当安装完docker后,默认会创建三个网络:bridge网络,host网络和none网络。可以使用:

  • docker inspect 网络id 查看每一个网络的相关配置
  • netstat -lnpt 查看目前系统开放的端口
  • firewall-cmd --list-ports 查看防火墙开放的端口

docker的四种网络模式

1.host模式

  • 例如使用创建一个host模式的mysql容器 docker run -d -e MYSQL_ROOT_PASSWORD='mysql' --net='host' --name='cslcp_mysql' mysql 在容器外连接mysql使用的ip是linux的ip,端口同样是linux的端口3306
  • 使用docker ps -a的场景下,无法显示目前正在使用的端口。在这种情况下可以使用docker inspect镜像名来查看该镜像开放的端口号。或者使用docker logs 容器名 查看容器启动日志来查看启动占用的端口,或者通过docker inspect 容器名来查看容器占用的端口号
  • 另外需要注意的问题是,以host模式启动的容器,需要确保容器使用的端口在宿主机的防火墙中配置过开放策略,否则其他机器无法访问对应服务。 firewall-cmd --permanent --zone=public --add-port=80/tcp
  • 最后,在使用host模式的场景下,可以开启多个容器,虽然有时候能够启动成功,但是当容器运行一段时间后,会发现只有一个能够运行,其他的都异常关闭了,这是因为端口冲突的原因。至于最后能保留哪一个容器,这个运行的效果不一定。​

2.bridge模式(网桥模式,这是docker的默认网络模式)

  • 使用docker network ls 查看当前的docker开放的网络
  • 使用docker inspect 网络id 查看网桥的配置,通常docker的桥模式会在宿主机上创建一个叫做docker0的宿主机网络作为网 桥。可以在宿主机上使用ip addr查看相关的ip。如果不想使用宿主机上默认的ip可以在 /etc/docker/ 目录中添加 daemon.json 配置文件,在文件中添加{"bip":"192.168.100.1/24"} 配置来修改对应的ip配置。足以在修改上述配置的时候,需要先停止dokcer服务 systemctl stop docker 修改完成后再次启动docker服务
  • 重新启动docker服务器,再次开启容器,可以查看容器的ip按照新配置的方案进行ip设置
  • 如果不希望使用docker分配的ip地址,可以在启动的过程中使用
    –ip参数来指定容器需要使用的ip地址(需要注意的是默认的桥接模式不允许用户自定义ip)例如:docker run -itd --name='c6' --network=bridge --ip=192.168.100.7 centos 该命令在指定后会报出异常。
    当我们需要使容器与容器进行通信时。可以使用以下策略

静态配置策略

第一步:创建自定义网络

docker network  create   --subnet=192.168.90.0/24  cslcp_network

第二步:动容器并加入网络

docker run  -it  --name=cslcp_1  --network=csclp_network --ip=192.168.90.5 centos

使用link配置策略

docker run  -itd  --name=c1 centos
docker run -itd --name=c2 --link=c1:cnet1 centos

进入到centos输入ping cnet1查看是否连通

docker exec -it  c2 bash

这种配置的优势是可以不使用静态ip,只是使用容器别名就可以直接访问目标容器,避免了在宿主机中出现ip冲突的问题,缺点是容器有依赖关系,所以被依赖的容器一定需要先启动,在一个复杂的网络模型中使用起来比较麻烦。

使用自定义网络+网络别名方案(推荐)
第一步:创建自定义网络

docker network  create   --subnet=192.168.90.0/24  cslcp_network

第二步:启动容器

 docker run -itd  --name=c1 --network=cslcp_network --network-alias=c1_net centos

第三步:通过网络别名访问目标容器(进入到centos输入ping c1_net查看是否连通)

3.container模式
使用该模式可以让多个容器共享同一个ip地址。

docker run  -itd  --name c1 centos
docker run -itd --name nginx --net container:c1 nginx

4**.none模式**(全部手工配置,在生产环境下一般不使用该种模式,老师就没讲,有想了解的可以去其他帖子看看)

三、docker file ( 利用docker file 创建一个自己的镜像,产品给客户部署 )

  1. docker file是用来构建docker 镜像的文件,在开始学习构建镜像之前,我们需要先来了解一下docker镜像的基本结构
  2. dockerfile由四部分组成

​ 第一部分是基础镜像信息

​ 第二部分是维护者信息(非必须)

​ 第三部分是镜像的操作指令

​ 第四部分是容器启动的时候需要执行的指令

docker file的编写

  • docker file是一个文本文件,通常该文件起名是Dockerfile,文件中第一部分需要编写基础镜像信息。使用FROM关键字,例如 FROM nginx 该语句的含义是指,创建的镜像文件是基础镜像是nginx,隐含的含义是新镜像也会包含nginx的基础镜像所以对于docker镜像来讲镜像的基础层都应该是操作系统 - 编写基础镜像后,可以在后面跟镜像的维护人信息,MAINTAINER <用户名 用户邮箱>
  • 第三部分需要编写针对目前读写容器进行的操作指令,需要注意的是,每一条指定都会改变镜像,所以每一条指定都会生成新的进行层,在工作中,镜像的层级尽量要少,镜像层多了后,会耗费较大的存储空间。常用的指定包括

1) RUN run指定代表在当前的容器层的shell中要执行的命令,例如在容器中创建一个文件夹(RUN mkdir /root/docker/content)。需要注意的是,每一次执行RUN指令都会需改当前的容器层状态,所以每次修改都会在当前容器中产生新的层,在生产活动中,就一个较为合理的使用建议是,镜像的层次尽量的少,所以建议在容器中采用&&号来连接多个需要RUN的指令,如果指令过长可以使用 “\”进行换行操作。RUN命令的执行时机是在构建镜像的时候。在build时候执行
2) EXPOSE 该指定代表容器运行之后向外开放的端口号。例如 EXPOSE 80 代表默认情况下,使用该镜像创建容器的时候,容器向宿主机开放80端口,如果需要向宿主机开放多个端口,可以直接写为 EXPOSE 90 80 1010
*** 3)*** ENV 设置docker容器的环境变量,在使用镜像启动容器的时候,我们有可能需要向容器中传递一些启动参数,这时候ENV就可以用来实施这个任务。在Dockerfile中,可以使用ENV MY_NAME=value的形式来设置名字叫做MY_NAME的环境变量,并赋予其初始值value,如果在启动容器的时候,需要改变其值,可以使用-e参数来进行重新指定,ENV设置的环境变量,在生效后,将会一直存在。想要观察环境变量的值,可以在容器启动后,进入容器后使用env命令来进行查看。此外,也可以在容器之外,使用 docker inspect命令来查看。在dockerfile中,声明了一个环境变量之后,可以使用 $环境变量的方式来进行引用
4) COPY在构建镜像的时候,如果需要将外部的文件拷贝的镜像内部,则可以使用COPY命令。命令格式为 COPY 宿主机文件 容器内地址。在生产环境下,有一个比较好的实施方式是,将需要拷贝的内容全部放到一个文件夹中,然后再dockerfile所在的目录进行镜像构建,尽量控制context的范围内的文件大小,因为在构建的过程中,docker需要将context中的所有文件都发送到docker的守护进程中,所以如果context内的文件太多,会造成构建镜像过大以及构建过程过长的问题。ADD和COPY相仿,它能够将宿主机的tar压缩包解压陈文件搞到镜像中。也可以下载宿主机没有的
5) USER通常指定为root账号。
6) WORKDIR,该指定会改变从WORKDIR指定之后的RUN以及CMD等相关指定的当前目录,例如 WORKDIR /root/web 则代表之后的指令的工作目录从root目录变更为/root/web目录。
7) VOLUME在构建镜像的时候,我们可以通过VOLUMN来给镜像指定一个挂载目标,在镜像内可以使用挂载目标直接访问在宿主机上的文件,如果没有指定挂载内容,则直接访问宿主机之内的内容。挂载目录或者是挂载文件可以在创建容器的时候使用-v参数来指定。 VOLUME可以接收一个数组型的参数,如果需要多个挂载点,可以在数组内直接声明。具体语法 VOLUME ["/root/vol","/root/tt"]
8) CMD,该指令与RUN的书写模式基本一致,但是她是在docker容器启动的时候需要执行的命令,在dockerfile中只能有一个CMD,如果写了多个也只会执行最后一个。在run或start执行。。demon off 守护模式关闭,进入当前控制台相当于没有-it
例如:

FROM nginx
USER root
RUN mkdir /root/web && mkdir /root/conf
COPY ./dist/* /root/web
COPY ./nginx.conf /root/conf/nginx.conf
EXPOSE 8080
CMD ["ngxin","-g","daemon off;","-c","/root/conf/ngxin.conf"]
FROM adoptopenjdk:11-jre-openj9
ENV ACTIVE=dev
ENV JARNAME=cslcp-0.0.1-SNAPSHOT.jar
RUN mkdir /opt/app && mkdir /opt/file
VOLUME ["/opt/app","/opt/file"]
#CMD ["java", "-jar", "/opt/app/cslcp-0.0.1-SNAPSHOT.jar" ,"--spring.profiles.active=${ACTIVE}"]
CMD java -jar /opt/app/${JARNAME} --spring.profiles.active=${ACTIVE}

四、docker 服务编排

  • docker 服务编排也叫docker compose,它的出现是应来解决使用docker部署大型应用的业务场景的问题。通常在生产环境中,使用docker部署一个应用需要使用多个容器,例如部署前端、后端、依赖服务、数据库等。如果每个容器都需要手工使用shell来启动则效率过于低下,所以在这样的场景中,我们可以采用docker compose来进行docker容器的编排工作。

第一步:下载docker compose

curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

第二步:修改docker compose让其有可执行权限

chmod 744 /usr/local/bin/docker-compose

第三步:测试

docker-compose -version

第四部:docker-compose.yml文件的编写
在docker-compose.yml文件中可以编写相关的配置属性,用来管理compose的构建过程,主要的属性包括:
1)version 代表compose文件格式版本,按照官网的实例,建议目前采用‘3.9’版本
2)services 该属性是compose文件中的核心属性,在该属性之下,可以配置compose启动的各种服务。主要是需要compose启动的各种容器信息。也是compose文件中主要的开发内容。
常用属性:

属性名称 说明
image 当前服务使用什么镜像文件
ports 当前容器需要映射的端口信息 - ”8080:80“
enviroments 当前镜像需要传递的参数
volumes 当前镜像的挂在点
tty:true 代表使用-it模式启动服务
build 指定dockerfile所在的路径,当使用docker compose编排一个容器,而且该容器需要构建的时候需要使用该参数
container_name 指定编排容器的名称
restart:always 在docker服务重启后,该容器是否自动重启
depends_on: 服务名 设定服务依赖关系,通过该配置可以决定服务的启动顺序
env_file 指定配置文件
context 指定上下文
dockerfile 指定需要使用的dockerfile文件

3)networks

例子1:在service中配置简单的服务信息,编写compose文件,启动一个nginx容器

version: '3.9'
services:my_nginx:image: "nginx"ports:- "8080:9090"volumes:- "/root/docker_vol/web/dist:/usr/share/nginx/html:ro"- "/root/docker_vol/web/conf/nginx.conf:/etc/nginx/nginx.conf:ro"
  • 使用docker-compose up命令 启动容器编排,需要注意的是,容器启动成功后,默认会占用当前的终端用来输出日志信息。我们可以重新打开一个终端,使用docker ps命令查看,发现docker中多了一个容器名字叫做 **my_nginx_1.这就是compose替我们启动的容器。
  • 在上面的例子中,my_nginx是一个服务的名字,也可以理解为是生成容器名字的其中一部分,image属性代表要使用什么镜像,ports 代表需要映射的端口,前边是宿主机的端口,而后面是容器内的端口。volumns代表要进行的文件挂载。
  • 此外,使用docker network ls命令可以发现,compose启动后,自动给我们创建了一个网络,通过 docker inspect 命令发现使用当前compose文件启动的容器默认都加入到了,新创建的网络中。

例子2:在tomcat-compose文件中构建一个服务,在本地docker中不存在有对应的镜像

version: '3.9'services:my_tomcat:image: "tomcat"
  • 如果在compose中包含本地docker中不存在的镜像,则在运行compose的过程中会自动下载对应的镜像。理论上在一台安装有docker以及docker
  • compose的宿主机上,在保证网络畅通的前提下,我们只需要依靠docker-compose文件就可以直接安装对应的系统。
  • 此外,在当前的例子中,我们将compose文件认为的修改为
    tomcat-compose.yml,如果不使用默认的文件名,则需要在执行docker-compose up命令的时候加上 -f 参数,手工指定对应的yml文件。

例子3:一次启动多个容器

version: '3.9'services:my_tomcat:image: "tomcat"my_nginx:image: "nginx"ports:- "8080:9090"volumes:- "/root/docker_vol/web/dist:/usr/share/nginx/html:ro"- "/root/docker_vol/web/conf/nginx.conf:/etc/nginx/nginx.conf:ro"

docker-compose命令

​ 在之前的例子中,我们使用了docker-compose up命令来启动一个容器编排,接下来,我们详细了解一下,在docker-compose中常用的命令以及参数使用

  1. docker-compose命令
    常用参数:
    -f 默认docker-compose会在当前文件夹下询招Dockercompose.yml文件,如果需要自定义文件名,可以使用-f 文件名 形式来指定
    -p 指定项目名称 指定项目后,通过compoose创建的所有容器都会自动添加项目名称前缀
    -v 查看当前docker-compose的版本信息
  2. docker-compose 环境变量
    docker compose 默认的环境变量为.env,在其中我们可以使用对应的键值对模式给compose传递值 --env-file 参数可以动态制动compose需要使用的配置文件位置
  3. docker-compose up 启动一个容器编排
    常用参数: `
参数名称 说明
-d 后台运行
–force-recreate 强制更新已经存在的容器
–remove-orphans 删除在compose文件中没有定义的容器,通常使用在修改了compose文件的场景下使用服务名 单独启动compose中的某一个服务,如果服务存在依赖,则被依赖的服务也会被启动
docker-compose down 删除对应的容器,网络服务
docker-compose stop 停止compose对应的所有服务
docker-compose start 启动所有的服务容器
docker-compose ps 查看与当前compse相关的服务容器
-q 只列出id值,其他值不显示
docker-compose logs 读取日志信息
docker-compose pull 拉取服务对应的镜像
docker-compose build 构建compose中的所有镜像、
docker-compose images 查看所有的镜像信息
docker-compose config 查看配置文件信息
docker-compose restart 重启服务
docker-compose exec 服务名 进行指定服务的容器
docker-compose rm 删除所有已经停止的服务容器
以上命令涉及到某个服务的时候均可以通过:命令:服务名对相应的服务进行操作 看左面

docker compose 网络管理

  1. ​默认场景下,使用docker compose编排服务,会自动创建对应的网络。可以使用docker network ls
    以及docker inspect 网络id 进行相关的查询。
  2. 可以在compose文件中,使用networks
    定义一个网络,并在服务中使用networks属性加入一个自定义网络。这时候有三种结果,如果所有的服务都加入到了自定义网络,则docker,会创建自定义网络,并将所有的服务容器添加到对应的网络中,如果没有任何服务声明加入自定义网络,则docker会创建默认网络,然后将容器添加到默认网络,而不会创建自定义网络,如果有的服务声明添加到自定义网络,而有的服务没有声明,则docker会创建两个网络,一个是自定义网络,而另一个是默认网络,并将对应的容器添加到对应的网络中。
  3. 使用固定ip策略
version: '3.3'
services:cslcp_web:image: "cslcp_web_image:v01"ports:- "19090:8080"build:context: "../web/"dockerfile: "Dockerfile"networks:- "cslcp_net"cslcp_mysql:image: "mysql"networks:cslcp_net:ipv4_address: 192.168.13.100ports:- "13306:3306"environment:MYSQL_ROOT_PASSWORD: 'root'cslcp_centos:container_name: 'test_centos'image: "centos"tty: truenetworks:cslcp_net:ipv4_address: 192.168.13.11
networks:cslcp_net:ipam:config:- subnet: "192.168.13.0/24"gateway: "192.168.13.1"
  1. 使用服务策略
    当compose启动成功后可以直接使用ping 访问服务名
  2. 使用网络别名策略
networks:cslcp_net:ipam:config:- gateway: 192.168.13.1subnet: 192.168.13.0/24
services:cslcp_centos:container_name: test_centosdepends_on:cslcp_web:condition: service_startedimage: centoslinks:- cslcp_web:cwnetworks:cslcp_net:ipv4_address: 192.168.13.11tty: truecslcp_mysql:environment:MYSQL_ROOT_PASSWORD: rootimage: mysqlnetworks:cslcp_net:ipv4_address: 192.168.13.100ports:- published: 13306target: 33064cslcp_web:build:context: /root/docker/dockercompose/cslcp/webdockerfile: Dockerfileimage: cslcp_web_image:v01networks:cslcp_net: nullports:- published: 19090target: 8080
version: '3.3'
  1. 使用container 策略
version: '3.3'
services:cslcp_web:image: "cslcp_web_image:v01"build:context: "../web/"dockerfile: "Dockerfile"depends_on:- "cslcp_centos"network_mode: "service:cslcp_centos"cslcp_mysql:image: "mysql"environment:MYSQL_ROOT_PASSWORD: 'root'depends_on:- "cslcp_centos"network_mode: "service:cslcp_centos"cslcp_centos:container_name: 'test_centos'image: "centos"tty: trueports:- "17070:8080"- "13306:3306"networks:cslcp_net:ipv4_address: 192.168.13.11
networks:cslcp_net:ipam:config:- subnet: "192.168.13.0/24"gateway: "192.168.13.1"

五、docker CI部署样例

记得先创建挂载出去的文件夹,网上教学据说不创建也能用,但是可能是我自己环境原因不太行,所以就提前创建好了。整套流程用的是LDAP(管理账号用的)+ heimdall(门户站点)+gitlab (代码仓库)+ jenkins (持续构建、流水线)+redmine(饭票)+ sonar (代码质量检测工具)+nextcloud(网盘) 部分功能持续更新中......

version: '3.1'services:hs-ldap:image: osixia/openldap:latesthostname: hs-ldaprestart: alwaysports:- "10001:389"volumes:- /home/docker_vol/openldap/slapd/database:/var/lib/ldap- /home/docker_vol/openldap/slapd/config:/etc/ldap/slapd.d- /etc/localtime:/etc/localtime:roenvironment:- LDAP_ORGANISATION=jn- LDAP_DOMAIN=jn.com- LDAP_ADMIN_PASSWORD=P@ssword- LDAP_CONFIG_PASSWORD=P@ssword- TZ=Asia/Shanghairedmine:image: redminerestart: alwaysports:- "10003:3000"volumes:- /home/docker_vol/redmine/files:/usr/src/redmine/files- /home/docker_vol/redmine/log:/usr/src/redmine/log- /home/docker_vol/redmine/data:/home/redmine/data- /home/docker_vol/redmine/config/configuration.yml:/usr/src/redmine/config/configuration.yml- /home/docker_vol/redmine/plugins:/usr/src/redmine/plugins- /etc/localtime:/etc/localtime:roenvironment:REDMINE_DB_MYSQL: dbREDMINE_DB_PASSWORD: schoolcloudREDMINE_SECRET_KEY_BASE: supersecretkeyREDMINE_DB_ENCODING: utf8db:image: mysql:5.7restart: alwaysports:- "10010:3306"command: mysqld  --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_civolumes:- /home/docker_vol/redmine/mysql/data:/var/lib/mysql- /home/docker_vol/redmine/mysql/conf:/etc/mysql/conf.d- /etc/localtime:/etc/localtime:roenvironment:MYSQL_ROOT_PASSWORD: schoolcloudMYSQL_DATABASE: redmineTZ: Asia/Shanghaidb_nextcloud:image: mysql:5.7restart: alwaysports:- "10011:3306"command: mysqld  --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_civolumes:- /home/docker_vol/nextcloud/mysql/data:/var/lib/mysql- /home/docker_vol/nextcloud/mysql/conf:/etc/mysql/conf.d- /etc/localtime:/etc/localtime:roenvironment:MYSQL_ROOT_PASSWORD: schoolcloudMYSQL_PASSWORD: schoolcloudMYSQL_DATABASE: nextcloudMYSQL_USER: nextcloudTZ: Asia/Shanghaidevops-nextcloud:image: nextcloudrestart: alwaysports:- "10002:80"volumes:- /home/docker_vol/nextcloud/html1:/var/www/html- /etc/localtime:/etc/localtime:roenvironment:REDMINE_DB_MYSQL: db_nextcloudREDMINE_DB_PASSWORD: schoolcloudREDMINE_SECRET_KEY_BASE: supersecretkeyREDMINE_DB_ENCODING: utf8heimdall:image: linuxserver/heimdallrestart: alwayscontainer_name: heimdallenvironment:- PUID=1000- PGID=1000- TZ=Asia/Shanghaivolumes:- /home/docker_vol/heimdall/config:/configports:- 80:80- 443:443restart: unless-stoppedgitlab:privileged: trueimage: gitlab/gitlab-cerestart: alwaysports:- "5443:443"- "82:82"- "2222:22"volumes:- /home/docker_vol/gitlab/config:/etc/gitlab- /home/docker_vol/gitlab/data:/var/opt/gitlab- /home/docker_vol/gitlab/logs:/var/log/gitlabtty: truejenkins:privileged: truetty: trueimage: jenkins/jenkins:2.289.1-lts-centos7restart: alwaysports:- "9302:8080"- "50000:50000"volumes:- /home/docker_vol/jenkins:/var/jenkins_home- /var/run/docker.sock:/var/run/docker.socksonarqube:restart: alwaysimage: sonarqubetty: trueenvironment:- SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=trueports:- "9000:9000"

六、docker集群

(1)Docker Swarm 配置准备以及部署

  1. 准备三台宿主机器ip地址分别是192.168.0.4、192.168.0.6以及192.168.0.7,其中192.168.0.4是作为manager节点(管理根节点)其他两台机器是作为work节点来使用。
  2. 创建swarm集群
​ docker swarm init --advertise-addr 192.168.0.4
​ docker swarm join --token SWMTKN-1-69kuzr0khh1slvbuul0wn99t8ydf3f1hwaprvyx2r3kho4lxj4-87c2vnklddpwu1wvemex5d6wb 192.168.0.4:2377
  1. 端口开放
​ firewall-cmd --zone=public --add-port=2377/tcp --permanent​ firewall-cmd --zone=public --add-port=7946/tcp --permanent​ firewall-cmd --zone=public --add-port=7946/udp --permanent​ firewall-cmd --zone=public --add-port=4789/tcp --permanent​ firewall-cmd --zone=public --add-port=4789/udp --permanen
  1. 修改主机名解析
​ hostnamectl set-hostname manager​ vi /etc/hosts 不是必须要做的​ 192.168.0.4 manager​ 192.168.0.6 worker01​ 192.168.0.7 worker02
  1. 在worker节点中使用生成的命令将当前节点添加到管理节点中
​ docker swarm join --token SWMTKN-1-69kuzr0khh1slvbuul0wn99t8ydf3f1hwaprvyx2r3kho4lxj4-87c2vnklddpwu1wvemex5d6wb 192.168.0.4:2377
  1. 在管理节点查看集群节点信息
​ docker node list​ docker inspect 节点id

(2)管理节点

  1. 查询目前集群中的节点信息
​ docker node ls (管理节点)​ docker inspect 节点id
  1. 关于节点的状态

Active:节点目前处于空闲状态,可以被指派新的任务

Pause:节点目前处于不可接受新任务的状态,但目前的任务可以继续执行

Drain:节点目前处于不可接受新任务的状态,并且停止目前正在执行的任务

Down:废弃的节点

docker node update --availability drain manager 将管理节点调整为不接受新任务,也不再执行新任务的状态(专做管理)docker node update --availability drain work01

​ docker swarm leave (工作节点) 让当前节点离开集群,离开后在管理端 节点的状态变成down状态。

docker swarm leave --force (管理节点)解散集群

docker node rm 节点名称 删除一个节点(只能删除down状态的节点)

  1. Swarm节点部署服务与管理

docker service create --replicas 2 --name cslcp_web -p18080:80 nginx 创建服务

docker service ls 查看当前的集群中有那些服务

docker service ps 服务名 查看有那些节点为当前服务提供支持

docker service scale cslcp_web=3 修改服务节点数量

docker service rm cslcp_web 删除所有的服务节点

制作整理不易,以上内容均为原创(参考了部分官方文档和老师整理的案例)。如要引用请附上本文链接,如有疑问可以在评论区畅所欲言,作者看到会第一时间回复,欢迎交流!

Docker的概念及基本指令学习(从安装、管理、核心概念到docker file 、 服务编排、集群)相关推荐

  1. Maven学习总结(四)——Maven核心概念

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(四)--Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平 ...

  2. Spark学习之路---Spark核心概念

    Spark核心概念简介 一个Spark应用都由驱动器程序发起集群上的各种并发操作,一个驱动器程序一般包含多个执行器节点,驱动器程序通过一个SaprkContext对象访问saprk.RDD(弹性分布式 ...

  3. 区块链学习 | 区块链的核心概念

    想要学习区块链的相关知识,区块链的核心概念--区块.哈希算法.公钥和私钥.时间戳等是必须要弄懂的.区块链由多个相连的区块构成,所以我们先从了解区块的概念开始! 一.区块 区块的结构图 先看上面的区块的 ...

  4. 【快速上手 MongoDB】介绍、安装、核心概念、基本操作

    MongoDB 快速上手 简介 使用 Docker 安装 核心概念 数据库 Database 集合 Collection 文档 Document 基本操作 库 集合 文档 插入 删除 更新 英文官方文 ...

  5. 基于Docker的Consul服务发现集群搭建

    在去年的.NET Core微服务系列文章中,初步学习了一下Consul服务发现,总结了两篇文章.本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架 ...

  6. 【Python学习系列四】Python程序通过hadoop-streaming提交到Hadoop集群执行MapReduce

    场景:将Python程序通过hadoop-streaming提交到Hadoop集群执行. 参考:http://www.michael-noll.com/tutorials/writing-an-had ...

  7. linux 跨物理 集群,linux学习之使用keepalived结合lvs搭建高可用负载均衡集群

    环境如下: 192.168.2.199 vm1.example.com HA主服务器 192.168.2.202vm2.example.com HA备服务器 192.168.2.205vm3.exam ...

  8. Linux学习笔记016---CentOS7虚拟机设置使用静态IP上网_配置集群的时候可以用

    JAVA技术交流QQ群:170933152 注意这里: 按下面的装完以后,可能本地ping不通centos虚拟机,这个时候:可以这样设置一下: 到控制面板,找到网络VMware Network Ada ...

  9. Hadoop学习之虚拟机环境配置,防火墙、selinux关闭、集群时间同步(LinuxcentOS7版本)

    目录​​​​​​​ 1. 镜像文件下载 2.Linux-centOS安装 第三步与第三步需在root用户下进行操作 3.虚拟机关闭防火墙 4.设置selinux 5.集群时间同步 1. 镜像文件下载 ...

  10. EdgeX Foundry第一弹 容器运行时docker与服务编排

    本文为Edgex系列第一篇文章,主要探讨容器化相关内容. 一.了解Edgex为什么先学习容器? 1.应用服务调度.Edgex服务众多,包含应用服务.支持服务.设备服务.安全服务.中间件等,使用容器部署 ...

最新文章

  1. Ubuntu14.04 工作区设置
  2. 满分简便解法:1002 写出这个数 (20分)
  3. 个人的博客搭建(持续更新)
  4. springboot 系列技术教程目录
  5. 二进制转换为三进制 ——C++实现
  6. php twig输出html,php – HTML不呈现[Twig] / [Slim]
  7. iOS开发UIAlertController之UIAlertAction加图片(UIAlertController按钮加图片)
  8. VS C# string 字符查找 寻找指定字符
  9. 解决libc.so.6: version `GLIBC_2.14#39; not found问题
  10. 使用opencv的nonfree模块
  11. 订单审批流程 数据库表设计
  12. 穿山甲android对接错误码40029,头条 穿山甲广告 错误码列表
  13. 37 一次获取redis连接阻塞引起的 Thread pool is EXHAUSTED
  14. 程序员讨论《黑客帝国》(一)真实与虚拟
  15. ​2022年个税专项附加扣除,开始确认,​拿到软考证书即可抵扣
  16. Matplotlib绘图9种经典风格,你喜欢哪种?
  17. 视频解码器的功能及应用
  18. 人生的“甲方”和“乙方”
  19. 中国中医科学院医学实验中心杨洪军/陈鹏提出蛋白芯片
  20. 广播(broadcast)的简单解析与实例运用

热门文章

  1. JS信用卡真实利率计算器
  2. QT_T04-COOD
  3. iOS 常见的六种 手势
  4. Unity渲染管线,初探SRP
  5. 【datawhale-gitmodel】以波士顿房价数据进行数据分析和数据可视化
  6. FlexSim软件PF模块标识详细解释
  7. linux下 VSCode快捷键
  8. android经典动态壁纸,android中自定义动态壁纸
  9. java转换json格式_java中常见的JSON格式转换方法:
  10. linux块设备驱动简述(Linux驱动开发篇)