docker

1.docker安装

1.安装docker

2.配置docker加速器

3.docker的基本目录

  • /etc/docker/ docker的认证目录

  • /var/lib/docker/ docker的应用目录

2.docker镜像

  • 搜索镜像

    $ docker search unbuntu
    
  • 拉取镜像

    $ docker pull unbuntu
    
  • 从registry仓库提交镜像 docker push + 仓库名称

    $ docker push mydjango:v1
    
  • 列举出所有镜像

    $ docker images -a
    
  • 使用dockerfile构建镜像,docker build + 目录,.代表当前目录,-t表示加标签

    $ docker build -t mydjango:2.0
    
  • 查看镜像历史命令格式

    $ docker history 镜像名称
    
  • 删除未标记或用过的镜像

    $ docker rmi mydjango:1.0 mydjango:2.0
    
  • 移除所有未被使用的镜像

    $docker image prune -a
    
  • 镜像加标签: docker tag 镜像标签 镜像标签名

    $ docker tag mydjango:1.0 django
    
  • 镜像重命名

    $ docker tag [old_iamge]:[old_version] [new_image]:[new_version]
    
  • 把镜像保存.tar文件 docker save 镜像>文件

    $ docker save mydjango:1.0 >mydjano_1.0.tar
    
  • 镜像导出

    $ docker save -o nginx.tar 镜像名称
    
  • 导入镜像

    $ docker load < 镜像包名称
    $ docker load -i mynginx_v1.tar #从.tar文件载入镜像: docker load -i .tar文件 
    
  • 根据容器镜像:docker commit 容器名 镜像名

    $ docker commit
    

3.docker容器

  • 创建容器

    $ docker create --name mydjango_1 -it -p 8080:80 mdjango:1.0
    
    参数名含义
    -i以交互模式运行容器
    -t为容器重新分配一个伪输入终端
    -p端口隐射,宿主机在前,容器在后
    -d后台运行容器,并返回容器ID
    -v目录挂载
    –entrypoint指定进入点
    –restart=always服务重启
  • 创建并运行容器

    $ docker run --name mydjango_1 -it -p 8080:80 mydjango:1.0 #创建容器并进入容器
    $ docker run -it ubuntu /bin/bash
    
  • 启动/停止/重启/容器

    $ docker start mydjango_1
    $ docker stop mydjango_1
    $ docker restart mydjano_1
    
  • 查看正在运行中的容器

    $ docker ps -a # -a 包括停止运行的容器
    
  • 进入运行的容器

    $ docker exec -it mydjango_1 /bin/bash
    
  • 查看容器日志

    $ docker logs web
    
  • 查看容器的信息

    $ docker inspect web
    $ docker inspect web | grep 'IPAddress' # 利用inspect查看容器的ip地址
    
  • 基于容器创建镜像

    $ docker commit -m '改动信息' -a '作者' 容器id 镜像名称:标签名称
    
  • 容器重命名

    $ docker rename mydjano_1 mydjano_2
    
  • 删除容器

    $ docker rm my_django1
    $ docker rm -f mydjango_1 # 强制删除一个正在运行的容器
    $ docker container prune # 删除已停止运行的所有容器
    
  • 查看容器内已修改文件

    $ docker diff mydjango_1
    
  • 查看容器的信息

    $ docker inspect web
    $ docker inspect web | grep 'IPAddress' # 利用inspect查看容器的ip地址
    

4.dockerfile

1.Dockerfile简介

#构建镜像命令格式:docker build -t [镜像名]:[版本号] [Dockerfile所在目录]
$ docker build -t nginx:v0.2 /opt/dockerfile/nginx/

2.Dockerfile入门

使用Dockerfile来创建一个定制化的镜像:ssh。

2.1 准备环境
#创建Dockerfile专用目录
mkdir /docker/images/ssh -p
cd /docker/images/ssh

#创建秘钥认证
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub > authorized_keys
cp /etc/apt/sources.list ./

sources.list

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
2.2 定制文件

创建Dockerfile文件

# 构建一个基于ubuntu的ssh定制镜像
# 基础镜像
FROM ubuntu-base
# 镜像作者
MAINTAINER XXX@qq.com
# 执行命令
# 增加软件源
ADD sources.list /etc/apt/sources.list

# 安装 ssh 服务
RUN apt-get update && apt-get install -y openssh-server curl vim net-tools && mkdir -p /var/run/sshd && mkdir -p /root/.ssh && sed -i "s/.*pam_loginuid.so/#&/" /etc/pam.d/sshd && apt-get autoclean && apt-get clean && apt-get autoremove

# 复制配置文件到相应位置,并赋予脚本可执行权限
ADD authorized_keys /root/.ssh/authorized_keys
# 对外端口
EXPOSE 22
# 启动ssh
ENTRYPOINT ["/usr/sbin/sshd","-D"]
#构建镜像
docker build -t ubuntu-ssh .
#使用新镜像启动一个容器,查看效果
docker run -d -p 10086:22 ubuntu-ssh
#容器检查
docker ps
docker port c03d146b64d4
#ssh查看效果
ssh 192.168.8.14 -p 10086

3.Dockerfile指令详解

3.1基础指令

FROM格式:

#FROM 是 Dockerfile 里的第一条而且只能是除了首行注释之外的第一条指令
FROM <image>
FROM <image>:<tag>

MAINTAINER格式:

#指定该dockerfile文件的维护者信息。类似我们在docker commit 时候使用-a参数指定的信息
MAINTAINER <name>

RUN格式:

每一行的RUN命令都会产生一层image layer, 导致镜像的臃肿

#表示当前镜像构建时候运行的命令
# RUN echo hello  
RUN <command>           
# shell模式:类似于 /bin/bash -c command
# RUN ["echo", "hello"]
RUN ["executable", "param1", "param2"]   # exec 模式:RUN ["/bin/bash", "-c", "command"]

EXPOSE格式:

#设置Docker容器对外暴露的端口号,Docker为了安全,不会自动对外打开端口,如果需要外部提供访问,还需要启动容器时增加-p或者-P参数对容器的端口进行分配
EXPOSE <port> [<port>...]

ENTRYPOINT格式:

entrypoint用于设置执行的命令,cmd传递参数

#每个Dockerfile中只能有一个ENTRYPOINT,当指定多个时,只有最后一个起效。
ENTRYPOINT ["executable", "param1","param2"]     #exec 模式
ENTRYPOINT command param1 param2                 #shell模式

CMD

容器启动命令CMD,容器启动时默认执行的命令, 启动容器时指定了其它命令,则CMD命令会被忽略

EXEC格式

建议使用exec的列表格式可以使用env环境变量

USER

尽量使用非root用户

3.2 目录文件指令

ADD格式:

ADD和COPY目标目录不存在都会自动创建,ADD自动去解压缩文件

ADD <src>... <dest> #将指定的<src>文件复制到容器文件系统中的<dest> 
ADD ["<src>",... "<dest>"] #src指的是宿主机,dest指的是容器

COPY格式:

#单纯复制文件场景,Docker推荐使用COPY 
COPY <src>... <dest>
COPY ["<src>",... "<dest>"]

VOLUME格式:

#VOLUME 指令可以在镜像中创建挂载点,这样只要通过该镜像创建的容器都有了挂载点
#通过VOLUME指令创建的挂载点,无法指定主机上对应的目录,是自动生成的
VOLUME ["/data"]
3.3 环境设置指令

ENV格式:

ENV设置的变量可以保存在image中和容器中

 #设置环境变量,可以在RUN之前使用,然后RUN命令时调用,容器启动时这些环境变量都会被指定
 ENV <key> <value>
 ENV <key>=<value>

WORKDIR格式:

#切换目录,为后续的RUN、CMD、ENTRYPOINT 指令配置工作目录.相当于cd可以多次切换(相当于cd命令),
WORKDIR /path/to/workdir         #shell 模式

ARG 格式

可以在镜像build的时候动态修改value, 通过 --build-arg

HEALTHCHECK格式

通过命令检查容器是否健康运行通过命令检查容器是否健康运行

`--interval=<间隔>`:两次健康检查的间隔,默认为 30 秒;
`--timeout=<时长>`:健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,默认 30 秒;
`--retries=<次数>`:当连续失败指定次数后,则将容器状态视为 `unhealthy`,默认 3 次
HEALTHCHECK --interval=5s --timeout=3s CMD curl -fs http://localhost/ || exit 1

4.Dockerfile构建过程

1.构建历史
$ docker history <镜像名> 
2.构建缓存

我们第一次构建很慢,之后的构建都会很快,因为他们用到了构建的缓存

全部不使用缓存

#构建时不适用缓存
docker build --no-cache -t [镜像名]:[镜像版本] [Dockerfile位置]
#部分使用缓存,dockerfile中指定REFRESH_DATE环境变量
#只要构建的缓存时间不变,那么就用缓存,如果时间一旦改变,就不用缓存了
ENV REFRESH_DATE 2018-01-12

部分使用缓存

# 基础镜像
FROM ubuntu-base
# 镜像作者
MAINTAINER xxxqq.com
# 创建构建刷新时间
ENV REFRESH_DATE 2018-11-02
# 执行命令

清理缓存

docker system prune
docker system prune --volumes

5.Dockerfile部署Django

1.新建views.py

admin-1@ubuntu:/data/soft# cat /data/server/itcast/test1/views.py
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.

def hello(resquest):
   return HttpResponse("itcast V1.0")	

2.下载Django-2.1.2.tar.gz

3.进入标准目录

mkdir /docker/images/django -p
cd /docker/images/django
cp views.py Django-2.1.2.tar.gz ./

4.dockerfile内容

# 构建一个基于ubuntu的docker定制镜像
# 基础镜像
FROM ubuntu-ssh
# 镜像作者
MAINTAINER XXX@qq.com
# 执行命令
RUN apt-get install python3-pip -y 
# 增加文件
RUN pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip3 install django==2.1.2
# 创建项目
WORKDIR /data/server
RUN django-admin startproject project
# 创建应用
WORKDIR /data/server/project
RUN python3 manage.py startapp test1
RUN sed -i "/staticfiles/a\  'test1'," project/settings.py
# 配置应用
COPY views.py /data/server/project/test1/
RUN sed -i '/t p/a\from test1.views import *' project/urls.py
RUN sed -i "/\]/i\  path('hello/', hello)," project/urls.py
# 启动项目
RUN sed -i "s#S = \[\]#S = \['*'\]#" project/settings.py
# 对外端口
EXPOSE 7000
# 运行项目
ENTRYPOINT ["python3","manage.py","runserver","0.0.0.0:7000"]

5.构建镜像

docker build -t ubuntu-django .

6.运行镜像

docker run -p 7000:7000 -d ubuntu-django

注意:

1.每一行的RUN命令都会产生一层image layer, 导致镜像的臃肿

2.ADD和COPY目标目录不存在都会自动创建 ,ADD自动去解压缩文件

3.ENV设置的变量可以保存在image中和容器中

4.ARG 可以在镜像build的时候动态修改value, 通过 --build-arg

5.容器启动命令 CMD,容器启动时默认执行的命令, 启动容器时指定了其它命令,则CMD命令会被忽略

6.entrypoint用于设置执行的命令,cmd传递参数

7.建议使用exec的列表格式可以使用env环境变量

8.尽量使用非root用户

docker build -t 镜像名称:版本号 -f dockerfile文件名 所在目录
docker build -t mycorn:v1   -f Dockerfile_corn .

5.docker存储

  • 创建数据卷

    $ docker run -itd --name 容器名称 -v 宿主机目录:容器目录 镜像名称
    
  • 创建一个数据卷容器

    $ docker create -v 容器目录 --name 容器名称 镜像名称
    
  • 创建两个容器,同时挂载数据卷容器

    $ docker run --volumes-form 数据卷容器id/name -tid --name 容器名称 镜像名称
    
  • 列出所有数据卷

    $ docker volume ls
    $ docker volume ls --filter dangling=true #使用过滤,列出所有未使用的数据卷
    
  • 删除数据卷

    $ docker volume rm <volume_name>
    $ docker volume prue # 删除未在使用的数据卷
    

6.docker网络

Docker常见的几种网络模式

docker network ls 查看使用了哪些网络

[root@centos8-nat-168-182-152 ~]# docker network ls
NETWORK ID     NAME            DRIVER    SCOPE
c0184302f6a8   bridge          bridge    local
420492e04276   host            host      local
fc5e9b954735   none            null      local
[root@centos8-nat-168-182-152 ~]# docker network inspect bridge(网络名称)

我们在使用 docker run 创建 Docker 容器时,可以用 –net 选项指定容器的网络模式,Docker 可以有以下 4 种网络模式:

  • bridge 模式:使用 --net=bridge 指定,默认设置

  • host 模式:使用 --net=host 指定。

  • none 模式:使用 --net=none 指定。

  • container 模式:使用 --net=container:NAME_or_ID 指定。

网络模式含义
Bridge(默认模式)此模式会为每一个容器分配,设置IP等,并将容器连接到一 docker0虚拟网桥,通过 docker0网桥以及Iptables nat表配置与宿主机通信
Host容器将不会虚拟出自己的网卡,配置自己的 IP等,而是使用宿主机的IP和端口
Container创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP,端口范围
None该模式关闭了容器的网络功能,与宿主机,与其他容器都不连通的
1.Bridge

Bridge模式是启动容器时的默认模式当Docker server启动时,会在主机上创建一个名为 docker0 的虚拟网桥,网桥模式不太适用于生产环境,因为网桥背后涉及很多底层工作,会导致相当大的开销

--icc=false表示把容器之间的通信关闭

--iptables=true --icc=false已连接的容器才能通信

docker inspect jenkins
docker inspect --format='{{.NetworkSettings.NewtWork.IPAddress}}' jenkins

主机网络

在这里插入图片描述

容器内部网络

在这里插入图片描述

2.Host

Host:容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的IP和端口

不涉及网桥模式中底层开销,因此速度与常规的主机网络一样快,面向外部网络流量大的容器(例如代理和缓存)可以使用主机模式,而其他容器则使用内部网络模式

$ docker inspect jenkins

对比一下宿主机 / etc/hosts,一模一样

$ docker execjenkins cat /etc/hosts
$ cat /etc/hosts
3.Container

container创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享 IP,端口范围

# 创建容器
$ docker run --name=busybox_jenkins --net=container:bridge -td jenkins
# 查看新创建容器的IP,上面这种方式查不出来
$ docker inspect --format='{{.NetworkSettings.IPAddress}}' jenkins
# 通过ifconfig查询ip
$ docker exec busybox_jenkins ifconfig
4.None
$ docker run -dt --net=none --name busybox_jenkins jenkins
# 查看它的网络状态, 验证它仅有 lo 接口,不能与容器外通信
$ docker exec busybox_jenkins ip a
5.Docker实现内外网络通信

ip_forward: linux内核中用于开关内核的报文转发功能,只有这个开关被打开时,内核才会执行报文的转发

默认情况下,容器可以主动访问到外部网络的连接,但是外部网络无法访问到容器

# 临时修改
$ echo 1 >  /proc/sys/net/ipv4/ip_forward
# 永久修改
$ echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
$ sysctl -p

查看默认路由

$ route -n
# 或者
$ ip route

添加路由映射

$ ip route add <container_ip_address> via <host_ip_address> dev <network_interface>
6.Docker网络操作命令汇总

创建网络

# mysite1-network是局域网的名字,可以自定义。默认bridge模式。
docker network create mysite-network
# 利用--driver或-d指定使用bridge驱动,创建mysite2-network网络
docker network create -driver bridge mysite2-network
docker network create -d bridge --gateway 172.200.0.1 -subnet 172.200.0.0/16
# 查看已创建的network列表
docker network ls
# 查看网络详情
docker network inspect mysite2-network

连接网络

# 运行新的容器,并加入到mysite1-network网络中
# --network 表示这个容器要连接到的网络
# --network-alias 表示这个容器在此网络中的名称,也可以使用--ip来指定容器的ip

docker run -d  -network mysite1-network --network-alias mysite1-network-name1 dockerw-web-image

# 将已经在运行的容器加入网络使用以下命令, 容器名为docker-web,别名为web
docker network connect --alias=web --network=mysite-network docker-web

#连接网络时为docker-web容器指定ip地址
docker network connect -ip=192.168.19.2 --network=mysite-network docker-web

# 断开 docker-web容器与mysite1-network的连接
docker network disconnect  mysite1-network docker-web

删除网络

#删除mysite1-network网络
docker network rm  mysite1-network

brctl

brctl是Linux中用于配置和管理网桥(bridge)的命令行工具,brctl命令可以用来创建,删除,修改和显示网桥,以及向网桥中添加或移除物理接口

#安装brctl
yum install -y bridge-utils
#查看bridge信息
brctl show
#创建网桥
brctl addr mydocker0

ip netns命令

ip netns是Linux中用于管理网络命名空间(network namespace)的命令行工具,它可以用来创建,删除,列出,进入网络命名空间等操作

#添加网络命名空间
ip netns add 空间名
#在名为<name>的网络命名空间中执行<command>命令
ip netns exec ns1 ip addr add 172.16.1.1/16 dev eth00-ns1
ip netns exec ns1 ip link set eth00-ns1 up

ip link命令

ip link是Linux中用于管理网络接口(network interface)的命令行工具,它可以用来配置和管理物理接口,虚拟接口,桥接接口等。

#ip link add <dev> type <type>:添加一个名为<dev>的新网络接口,并指定类型为<type>(如veth、bridge、vlan等)
#该命令的含义是创建一对虚拟以太网接口,分别命名为veth-ns1和eth00-ns1,并将它们成对地连接起来,以便在不同的网络命名空间中使用
ip link add veth-ns1 type veth peer name eth00-ns1
# ip link set <dev> netns <ns>:将名为<dev>的网络接口移动到名为<ns>的网络命名空间中
ip link set eth00-ns1 netns ns1
#ip link set <dev> up/down:将名为<dev>的网络接口启用或禁用 把veth-ns1这个bridge up起来
ip link set veth-ns1 up

iptable

iptables是Linux系统中用于配置和管理防火墙规则的命令行工具,它可以用来控制网络数据包的流动和传输,以实现网络安全和访问控制

#用于列出当前系统中nat表中的所有规则 
#-t用于指定要操作的表,nat表示要操作的是nat 
# --list用于列出指定表中的所有规则,包括链名、匹配规则、动作等详细信息
iptables --list -t nat

#-t nat:指定要操作的表为nat表,
#-n:不进行DNS解析,直接显示IP地址,
#-v:显示规则的统计信息,包括匹配的数据包数和字节数
# -x:将数据包和字节数以更易读的格式进行显示
#iptables -t nat -nvxl命令需要在root权限下运行
iptables -t nat -nvxl
7.补充

子网掩码

  • 作用:将某个IP地址划分成网络地址和主机地址两部分
  • 规则:子网掩码的长度也是32位,左边是网络位,用二进制数字“1”表示,右边是主机位,用二进制数字“0”表示
  • 举例:“192.168.1.1”子网掩码为“255.255.255.0”,其中“1”有24个代表与此相对应的IP地址左边24位是网络号.“0”有8个,代表与此相对应的IP地址右边8位是主机号

网关

  • 定义:网关实质上是一个网络通向其他网络的IP地址

  • 举例:网络A的IP地址范围为“192.168.1.1192.168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1192.168.2.254”,子网掩码为255.255.255.0,根据子网掩码判定两个网络中的主机处在不同的网络里,而要实现这两个网络之间的通信,则必须通过网关

当浏览器输入一个网址并敲回车,整个过程都发生了什么

  • DNS解析:浏览器首先会检查自己的缓存中是否存在该域名对应的IP地址,如果没有,则向本地DNS服务器发起请求

  • TCP连接:浏览器通过DNS解析获得了服务器的IP地址后,会向该IP地址发送TCP连接请求进行三次握手

  • 发送HTTP请求:

    • 建立TCP连接后,浏览器会向服务器发送HTTP请求,请求中包含请求方法,请求头以及请求体等信息.
    • 服务器收到浏览器的HTTP请求后,会根据请求的内容进行处理,并返回相应的HTTP响应,响应中包含响应状态码,响应头以及响应体等信息
    • 浏览器接收到服务器返回的HTTP响应后,会根据响应中的内容进行页面渲染,并在页面上显示相应的内容
  • TCP断开连接:页面渲染完成后,浏览器与服务器进行四次挥手,相互之间断开连接

在这里插入图片描述

网络知识补充NAT

在这里插入图片描述

7.docker compose

1.安装
pip install docker-compose
2.docker-compose语法
veseion: "3.8"
services: '容器'
  servicename1: '服务器名称'
    image: '镜像名称'
    command: '可选,默认覆盖镜像里的CMD命令'
    environment: '可选,相当于docker run 里的-env'
    volumes: '可选,相当于 docker run 里的 -v'
    networks: '可选,相当于 docker run 里 --network'
    ports: '#可选,相当于 docker run里的-p'
  servicename2:
    build:
      context: '指定Dockerfile文件所在的目录'
      docekerfile: 'Dockerfile文件名'
      args:
        参数名: 参数值
    container_name: '默认将会使用 项目名称_服务名称_序号 这样的格式,注意::指定容器名称后,该服务将无法进行扩展(scale),因为Docker不允许多个容器具有相同的名称'
    depends_on:
      - servicename1
    env_file: .env
    environment:
      RACK_ENV: development
    expose:
      - "3000"
      - "8000"
    network_mode: "bridge"
    networks:
      some-network:
       ipam :
       		drive: default
       		config:
       			- sububet "'172.16.0.0.1/16'"
      other-network:
    ports:
      - "3000"
    volumes:
      - /var/lib/mysql
    restart: always
    security_opt:
      - seccomp:unconfined #指定容器模板标签(label)机制的默认属性(用户、角色、类型、级别等)
    logging: #日志选项
      driver: "json-file"
      options:
        max-size: "500m"


  volumes: '可选 相当于docker volumes create'
  networks: '可选 相当于 docker network create'
  
  # HEALCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:5000 || exit 1
  healthcheck: # 容器的健康检查
	test: ["CMD","curl","-f","http://localhost"]
	interval: 1m30s
	timeout: 10s
	retries: 3	
3.docker-compose命令
  • 检查docker-compose.yml文件格式是否正确

    $ docker-compose config 
    
  • 默认使用docker-compose.yml构建镜像

    $ docker-compose build --no-cache  -f docker-compose1.yml -p project
    
    • –no-cache:不带缓存的构建
    • -f 指定构建的文件
    • -p 指定项目名称,默认将使用所在目录名称作为项目名
  • 列出Compose文件构建的镜像

    $ docker-compose images 
    
  • 构建镜像

    $ docker-compose bulid
    
  • 启动/暂停/重启所有编排容器服务

    $ docker-compose up -d        #启动所有编排容器服务
    $ docker-compose down         # 停止所有up命令启动的容器
    $ docker-compose restart web  # 重新启动停止服务的容器
    
  • 在指定服务器启动一个容器,并执行ping docker.com

    $ docker-compose  run 容器名称 ping 服务名称 
    $ docker-compose run -d --name 名称 -e key=val -u user名
    
  • 查看所有编排容器,包括已停止的容器

    $ docker-compose ps -a
    
  • 进入指定容器执行命令

    $ docker-compose exec nginx bash 
    $ docker-compose exec web python manage.py migrate --noinput
    
  • 查看web容器的实时日志

    $ docker-compose logs -f web
    
  • 暂停/恢复web容器

$ docker-compose pause web
$ docker-compose unpause web
  • 删除web容器,删除前必需停止stop web容器服务
$ docker-compose rm web  
  • 查看各个服务容器内运行的进程
$ docker-compose top   
  • 拉取服务所依赖的镜像

    $ docker-compose pull 
    
  • 水平扩展 scale

    $ docker-compose scale 容器1=3 容器2=2 #容器1启动3个,容器2启动2个
    

8. git和容器–cicd

azure和github action很像

M9OHH-Q88JQ-DX72D-R04RN

dckr_pat_9uHXTMgCFExvaYr3F7ujE6x_9nQ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值