IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Docker 学习 -> 正文阅读

[系统运维]Docker 学习

Docker 学习


通过在 Centos7.9上安装Docker并进行实际操作。

Centos 7.9 安装

  1. 查看内核版本

    $ uname -a
    Linux msr-server 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
    
  2. 更新yum包

    $ yum update
    
  3. 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

    $ yum -y install gcc
    $ yum -y install gcc-c++
    $ yum install -y yum-utils device-mapper-persistent-data lvm2
    
  4. 设置的yum源

    $ yum list docker-ce --showduplicates | sort -r
    # 或者阿里云yum
    $ yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  5. 查看仓库中docker版本,可以指定安装,不指定安装最新版本

    $ yum list docker-ce --showduplicates | sort -r
    Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
    Loaded plugins: fastestmirror
    Installed Packages
    docker-ce.x86_64            3:19.03.5-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:19.03.5-3.el7                    @docker-ce-stable
    docker-ce.x86_64            3:19.03.4-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:19.03.3-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:19.03.2-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:19.03.1-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:19.03.0-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.9-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.8-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.7-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.6-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.5-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.4-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.3-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.2-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.1-3.el7                    docker-ce-stable 
    docker-ce.x86_64            3:18.09.0-3.el7                    docker-ce-stable 
    docker-ce.x86_64            18.06.3.ce-3.el7                   docker-ce-stable 
    docker-ce.x86_64            18.06.2.ce-3.el7                   docker-ce-stable 
    docker-ce.x86_64            18.06.1.ce-3.el7                   docker-ce-stable 
    docker-ce.x86_64            18.06.0.ce-3.el7                   docker-ce-stable 
    docker-ce.x86_64            18.03.1.ce-1.el7.centos            docker-ce-stable 
    docker-ce.x86_64            18.03.0.ce-1.el7.centos            docker-ce-stable 
    docker-ce.x86_64            17.12.1.ce-1.el7.centos            docker-ce-stable 
    docker-ce.x86_64            17.12.0.ce-1.el7.centos            docker-ce-stable 
    docker-ce.x86_64            17.09.1.ce-1.el7.centos            docker-ce-stable 
    docker-ce.x86_64            17.09.0.ce-1.el7.centos            docker-ce-stable 
    docker-ce.x86_64            17.06.2.ce-1.el7.centos            docker-ce-stable 
    docker-ce.x86_64            17.06.1.ce-1.el7.centos            docker-ce-stable 
    docker-ce.x86_64            17.06.0.ce-1.el7.centos            docker-ce-stable 
    docker-ce.x86_64            17.03.3.ce-1.el7                   docker-ce-stable 
    docker-ce.x86_64            17.03.2.ce-1.el7.centos            docker-ce-stable 
    docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable 
    docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable 
    Determining fastest mirrors
    Available Packages
    
  6. 安装docker

    $ yum makecache fast
    $ yum install docker-ce
    
  7. 启动Docker,加入开机启动,验证安装

    $ systemctl start docker
    $ systemctl enable  docker
    $ docker version
    
  8. 配置阿里云镜像加速

每个账户对应的mirrors地址是唯一的,请将https://******.mirror.aliyuncs.com替换你自己的地址。

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

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

容器使用

查看Docker命令

$ docker
$ docker run --help

搜索并拉取镜像

$ docker search 镜像名
$ docker pull 镜像名
$ docker pull 镜像名:版本号

删除镜像

$ docker rmi 镜像名

启动容器

启动容器,可以使用容器ID容器名称启动,推荐使用容器名称。

-it参数说明, -i表示交互的输入输出,-t表示模拟容器终端

ubunut镜像名,如果没有被拉取,提示无法找到,之后自动拉取

/bin/bash: 指定执行的脚本

--name: 指定容器的名字

--restart=always:表示容器停止后,自动启动容器

$ docker run -it ubuntu /bin/bash --restart=always --name test-name

常用操作

查看所有容器

$ docker ps -a

查看运行中的容器

$ docker ps

启动容器

# docker start 容器id|容器name
$ docker start 2dfs3rrfwef
$ docker start gds-test

停止容器

# docker stop 容器id|容器name
$ docker stop 2dfs3rrfwef
$ docker stop gds-test

查看容器日志

# docker logs 容器id|容器name
$ docker logs 2dfs3rrfwef
$ docker logs gds-test

删除容器

#docker rm 容器id
$ docker rm 2dfs3rrfwef

进入容器

$ docker exec -it 243c32535da7 /bin/bash

复制文件

文件复制支持双向操作

复制文件到容器
$ docker cp /var/wwwroot/koa-test/ 容器id:/var/wwwroot/

从容器复制文件到本地

$ docker cp 容器id:/var/wwwroot/koa-test/ /var/wwwroot/

升级容器

生成镜像

通过Dockerfile文件配置打包命令,并进行打包操作。

打包前的准备

在项目根目录,创建Dockerfile,内容如下:

此代码打包后的体积接近1GB,建议使用下面的优化版本。

FROM node
ADD . /var/wwwroot/koa-test/
WORKDIR /var/wwwroot/koa-test/
RUN cd /var/wwwroot/koa-test/ && npm install
EXPOSE 3010
CMD ["npm", "start"]

打包优化

alpine 是最小的可运行linux容器,安装 nodenpm 后就构建完毕。构建的镜像体积不到100MB。

FROM alpine  #最小的linux容器,大概只有5MB
RUN apk add --update nodejs npm #安装nodejs 和 npm
ENV NODE_ENV production	#设置运行环境为production
WORKDIR /var/wwwroot/koa-test/	#设置当前的工作目录
COPY . .    #复制文件
RUN npm ci --only=production    #安装依赖
EXPOSE 3000    #暴露端口
CMD ["npm", "start"] #初始化执行脚本

打包

在项目目录,运行下面的脚本

$ docker build -t node-gds-koa ./
$ docker build -t gds-koa-nosync ./

打包时使用代理

$ docker build -t gds-koa-alpine ./ --build-arg https_proxy=http://172.17.0.1:1080

运行生成的镜像

#image:
$ docker run --restart=always -d -p 3015:3000 -e NODE_ENV=production --name koa-015 node-gds-koa

#image:
$ docker run --restart=always -d -p 3015:3000 -e NODE_ENV=production --name koa-015 gds-koa-nosync

导出镜像文件

#将镜像gds-koa-nosync导出到当前目录的gds-koa-nosync.tar
$ docker save gds-koa-nosync > gds-koa-nosync.tar

导入镜像文件

#将当前目录的gds-koa-nosync.tar镜像文件导入到Docker
$ docker load < gds-koa-nosync.tar

Docker Compose

配置文件

可以在配置文件里调用环境变量,语法${DB_PASS}

Ubuntu

Linux下可以创建/root/.env文件,批量设置环境变量参数。

DB_NAME=gdscms
DB_PASS=root
DB_PASS=123456

之后修改/root/.profile,并在最后添加:

set -o allexport; source /root/.env; set +o allexport

使用printenv查看所有环境变量

CentOS

…todo…

配置文件docker-compose.yml

version: "3"
services:
  nginx: 
    image: nginx:stable-alpine
    ports:
      - "3000:80"
    volumes: 
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
    
  koa-app:
    build: .
    environment: 
      - PORT=3000
    depends_on:
      - db
  db:
    image: postgres:10.18-alpine
    restart: always
    environment:
      POSTGRES_DB: gdscms
      POSTGRES_PASSWORD: ${DB_PASS}
      PGDATA: /var/lib/postgresql/data/pgdata
      
    volumes: 
      - postgres-db:/var/lib/postgresql/data
volumes: 
  postgres-db:

配置文件docker-compose.dev.yml

version: "3"
services: 
  koa-app:
    build: 
      context: .
      args:
        NODE_ENV: development
    volumes:
      - ./:/app/
      - /app/node_modules
    environment: 
      - NODE_ENV=development
      - GDS_DB_TYPE=postgres
      - GDS_DB_HOST=db
      - GDS_DB_USER=postgres
      - GDS_DB_PASS=****
    command: npm run dev

  jenkins:
    image: jenkins/jenkins:lts
    ports: 
      - "50001:50001"
      - "8080:8080"
    environment:
      - JENKINS_SLAVE_AGENT_PORT=50001
    volumes: 
      - jenkins-data:/var/jenkins_home

volumes: 
  jenkins-data:

运行

简单运行

docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d

负载均衡运行

创建./nginx/default.conf的nginx配置文件

server {
    listen 80;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://koa-app:3000;
        proxy_redirect off;
    }
}

运行

添加--scale参数,并在后面加上容器名称=数量

docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d --scale koa-app=2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nGFYRuJk-1631372611606)(C:\Users\joy\AppData\Roaming\Typora\typora-user-images\image-20210903075844426.png)]

使用Aliyun管理镜像

新建Aliyun仓库

进入阿里云镜像服务控制台,新建镜像仓库。

在新建之前,需要创建一个registry登录密码。

设置完密码之后,进入到仓库管理界面

设置代码源可以使用github,阿里云comide等等,选择本地仓库。

  • 命名空间:相当于组织名
  • 仓库名称:Docker容器的名字

登录仓库

需使用正确的username,执行后,会提示输入登录密码

$ docker login --username=email@domain.com registry.cn-hangzhou.aliyuncs.com

推送到Aliyun

如果没登录,需要先登录,并输入在新建阿里云仓库之前设置的Registry密码
镜像名称,需要在阿里云镜像管理里进行查询

$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/bulog/gds-koa-nosync:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/bulog/gds-koa-nosync:[镜像版本号]

示例

首先使用docker images命令查询需要push的镜像ID为e3a1bb06d900

$ docker tag e3a1bb06d900 registry.cn-hangzhou.aliyuncs.com/bulog/gds-koa-nosync:v1
$ docker push registry.cn-hangzhou.aliyuncs.com/bulog/gds-koa-nosync:v1

从Aliyun拉取

$ docker pull registry.cn-hangzhou.aliyuncs.com/bulog/gds-koa-nosync:[镜像版本号]

自动化 Docker watchtower

https://github.com/containrrr/watchtower

需要使用镜像名称启动容器。

watchtower 会自动根据镜像名称最前面内容,获取镜像的实际请求URL地址。

运行

环境变量:

  • WATCHTOWER_TRACE=true
  • WATCHTOWER_DEBUG=true
  • WATCHTOWER_POLL_INTERVAL=50
$ docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower container_to_watch

私有仓库

国内推荐使用阿里云的镜像仓库。

docker run -d --name watchtower -e REPO_USER=email@domain.com -e REPO_PASS=PASSWORD -e WATCHTOWER_POLL_INTERVAL=50 --restart always -v /Users/joy/.docker/config.json:/config.json -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower gds-01 --debug

私有库

如果是私有库,需要传入用户名和密码

$ docker run -d \
  --name watchtower \
  -e REPO_USER=username \
  -e REPO_PASS=password \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower container_to_watch --debug

Docker compose

使用Docker compose方式

version: "3"
services:
  cavo:
    image: index.docker.io/<org>/<image>:<tag>
    ports:
      - "443:3443"
      - "80:3080"
  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/.docker/config.json:/config.json
    command: --interval 30

自动删除旧镜像

使用 --cleanup 参数在更新后自动删除旧的镜像。

仅监控更新情况,不更新

使用 --monitor-only 将仅监控新镜像并发送通知,不会更新容器。

设置自动更新检查频率

使用 --interval 设置设更新检测时间间隔,单位为秒。比如每隔 1 个小时检查一次更新则为 --interval 3600

通知提醒

当容器更新时,watchtower 可通过日志系统中的 hooks 发送通知。要发送的通知类型可通过 --notifications 参数(或环境变量 WATCHTOWER_NOTIFICATIONS)设置,可设置的值包括:

?email:通过 e-mail 发送通知?slack:通过 Slack webhook 发送通知?msteams:通过 MSTeams webhook 发送通知?gotify:通过 Gotify 发送通知?shoutrrr:通过 containrrr/shoutrrr 发送通知

比如我们想通过电子邮件接收通知,就可以设置以下命令行选项或它们对应的环境变量:

docker run -d \  --name watchtower \  -v /var/run/docker.sock:/var/run/docker.sock \  -e WATCHTOWER_NOTIFICATIONS=email \  -e WATCHTOWER_NOTIFICATION_EMAIL_FROM=fromaddress@gmail.com \  -e WATCHTOWER_NOTIFICATION_EMAIL_TO=toaddress@gmail.com \  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.gmail.com \  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 \  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=fromaddress@gmail.com \  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=app_password \  -e WATCHTOWER_NOTIFICATION_EMAIL_DELAY=2 \  containrrr/watchtower
  • --notification-email-from(环境变量 WATCHTOWER_NOTIFICATION_EMAIL_FROM):邮件发送地址
  • --notification-email-to(环境变量 WATCHTOWER_NOTIFICATION_EMAIL_TO):邮件接收地址
  • --notification-email-server(环境变量 WATCHTOWER_NOTIFICATION_EMAIL_SERVER):设置 SMTP 服务器
  • --notification-email-server-tls-skip-verify(环境变量 WATCHTOWER_NOTIFICATION_EMAIL_SERVER_TLS_SKIP_VERIFY):不验证邮件服务器的 TLS 证书
  • --notification-email-server-port(环境变量 WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT):设置 SMTP 的短裤男,默认为 25
  • --notification-email-server-user(环境变量 WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER):SMTP 的用户名
  • --notification-email-server-password(环境变量 WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD):密码
  • --notification-email-delay(环境变量 WATCHTOWER_NOTIFICATION_EMAIL_DELAY):发送通知之前的延迟(秒)
  • --notification-email-subjecttag(环境变量 WATCHTOWER_NOTIFICATION_EMAIL_SUBJECTTAG):包含在主题标签中的前缀

Docker Swarm

查看Dockers Swarm状态

此处会显示docker swarm状态,默认为inactive

docker info

启用

此处会生成专用的加入密匙,可以将其他的docker加入进来

支持参数:

  • –advertise-addr: 默认的IP和端口,如192.168.1.18:2377
  • –listen-addr: 默认的IP和端口,如192.168.1.18:2377
docker swarm init

加入

如果需要加入其他的docker manager,使用下面的命令加入

docker swarm join --token SWMTKN-1-1ad4l1v44lfu7quhuj4u5l5dju7j2p1942nr995umvycp5a1f9-6oc0y4w2i7yi0p5d8gtefzr4d 192.168.65.3:2377

docker-compose.yml配置

运行

docker stack deploy -c docker-compose.yml -c docker-compose.prod.yml myapp

查看所有节点

docker node ls

查看所有stack

docker stack ls

查看stack的所有services

docker stack services myapp

查看所有services

docker service ls
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:32:23  更:2021-09-12 13:32:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 2:53:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码