Docker Docker-compose 基本操作

安装docker

  1. 下载安装脚本
    1. https://github.com/liumiaocn/easypack/blob/master/docker/install-docker.sh
  2. 下载docker: https://download.docker.com/linux/static/stable/x86_64/选择ce版本下载
  3. 打开脚本文件install-docker.sh 将里面的docker版本替换为2、中下载的版本
    1.  
    2. 更改下帮助文档
  4. 将install-docker.sh和docker-18.06.3-ce.tgz拷贝到安装机器(如果安装了lrzsz可rz上传)
  5. sh install-docker.sh docker-18.06.3-ce.tgz 或者给install-docker.sh 权限 (chmod 777 name)·
  6. docker --version
    1. Docker version 18.06.3-ce, build d7080c1
  7. 开放2375docker远程访问端口
    1. firewall-cmd  --zone=public  --query-port=端口号/tcp   查看端口是否开放
    2. firewall-cmd --zone=public  --add-port=端口号/tcp -- permanent  开放端口
    3. firewall-cmd --realod 重新加载防火墙

========================安装成功=============================

Docker镜像导出导入

  1. 涉及的命令有export、import、save、load
  2. 方法一: (建议)
  1. docker save -o nginx.tar nginx:latest或者docker save > nginx.tar nginx:latest

其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)

  1. docker load -i nginx.tar或者docker load < nginx.tar

其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息

 

  1. 方法二:
  1. 命令docker export [options] container

例: docker export nginx-test >nginx-test.tar

  1. 命令: docker import [options] file|URL|- [REPOSITORY[:TAG]]

docker import nginx-test.tar nginx:imp或者cat nginx-test.tar | docker import -        nginx:imp

  1. 区别:
  1. export命令导出的tar文件略小于save命令导出的
  2. save是依据镜像来的,所以导入时可以完整保留下每一层layer信息

export命令是从容器(container)中导出tar文件,而save命令则是从镜像

(images)中导出

Dockerfile命令

Dockerfile的基本结构

Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。

 

Dockerfile文件说明

Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以#字符开头则被视为注释。可以在Docker文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令。

 

在这里列出了一些常用的指令。

 

FROM:指定基础镜像,必须为第一个命令

 

复制代码

格式:

  FROM <image>

  FROM <image>:<tag>

  FROM <image>@<digest>

示例:

  FROM mysql:5.6

注:

  tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像

复制代码

MAINTAINER: 维护者信息

 

格式:

    MAINTAINER <name>

示例:

    MAINTAINER Jasper Xu

    MAINTAINER sorex@163.com

    MAINTAINER Jasper Xu <sorex@163.com>

RUN:构建镜像时执行的命令

 

复制代码

RUN用于在镜像容器中执行命令,其有以下两种命令执行方式:

shell执行

格式:

    RUN <command>

exec执行

格式:

    RUN ["executable", "param1", "param2"]

示例:

    RUN ["executable", "param1", "param2"]

    RUN apk update

    RUN ["/etc/execfile", "arg1", "arg1"]

注:

  RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache

复制代码

ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

 

复制代码

格式:

    ADD <src>... <dest>

    ADD ["<src>",... "<dest>"] 用于支持包含空格的路径

示例:

    ADD hom* /mydir/          # 添加所有以"hom"开头的文件

    ADD hom?.txt /mydir/      # ? 替代一个单字符,例如:"home.txt"

    ADD test relativeDir/     # 添加 "test" 到 `WORKDIR`/relativeDir/

    ADD test /absoluteDir/    # 添加 "test" 到 /absoluteDir/

复制代码

COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源

 

CMD:构建容器后调用,也就是在容器启动时才进行调用。

 

复制代码

格式:

    CMD ["executable","param1","param2"] (执行可执行文件,优先)

    CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)

    CMD command param1 param2 (执行shell内部命令)

示例:

    CMD echo "This is a test." | wc -

    CMD ["/usr/bin/wc","--help"]

注:

   CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。

复制代码

ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去"application",只使用参数。

 

复制代码

格式:

    ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)

    ENTRYPOINT command param1 param2 (shell内部命令)

示例:

    FROM ubuntu

    ENTRYPOINT ["top", "-b"]

    CMD ["-c"]

注:

   ENTRYPOINT与CMD非常类似,不同的是通过

docker run

执行的命令不会覆盖ENTRYPOINT,而

docker run

命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。

复制代码

LABEL:用于为镜像添加元数据

 

格式:

    LABEL <key>=<value> <key>=<value> <key>=<value> ...

示例:

  LABEL version="1.0" description="这是一个Web服务器" by="IT笔录"

注:

  使用LABEL指定元数据时,一条LABEL指定可以指定一或多条元数据,指定多条元数据时不同元数据之间通过空格分隔。推荐将所有的元数据通过一条LABEL指令指定,以免生成过多的中间镜像。

ENV:设置环境变量

 

复制代码

格式:

    ENV <key> <value>  #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量

    ENV <key>=<value> ...  #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行

示例:

    ENV myName John Doe

    ENV myDog Rex The Dog

    ENV myCat=fluffy

复制代码

EXPOSE:指定于外界交互的端口

 

复制代码

格式:

    EXPOSE <port> [<port>...]

示例:

    EXPOSE 80 443

    EXPOSE 8080

    EXPOSE 11211/tcp 11211/udp

注:

  EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在

docker run

运行容器时通过-p来发布这些端口,或通过

-P

参数来发布EXPOSE导出的所有端口

复制代码

VOLUME:用于指定持久化目录

 

复制代码

格式:

    VOLUME ["/path/to/dir"]

示例:

    VOLUME ["/data"]

    VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"

注:

  一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能:

1 卷可以容器间共享和重用

2 容器并不一定要和其它容器共享卷

3 修改卷后会立即生效

4 对卷的修改不会对镜像产生影响

5 卷会一直存在,直到没有任何容器在使用它

复制代码

WORKDIR:工作目录,类似于cd命令

 

复制代码

格式:

    WORKDIR /path/to/workdir

示例:

    WORKDIR /a  (这时工作目录为/a)

    WORKDIR b  (这时工作目录为/a/b)

    WORKDIR c  (这时工作目录为/a/b/c)

注:

  通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。在使用

docker run

运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。

复制代码

USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

 

复制代码

 格式:

  USER user

  USER user:group

  USER uid

  USER uid:gid

  USER user:gid

  USER uid:group

 

 示例:

  USER www

 

 注:

 

  使用USER指定用户后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都将使用该用户。镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户。

 

复制代码

ARG:用于指定传递给构建运行时的变量

 

格式:

    ARG <name>[=<default value>]

示例:

    ARG site

    ARG build_user=www

ONBUILD:用于设置镜像触发器

 

复制代码

格式:

  ONBUILD [INSTRUCTION]

示例:

  ONBUILD ADD . /app/src

  ONBUILD RUN /usr/local/bin/python-build --dir /app/src

注:

  当所构建的镜像被用做其它镜像的基础镜像,该镜像中的触发器将会被钥触发

复制代码

 

 

以下是一个小例子:

 

复制代码

# This my first nginx Dockerfile

# Version 1.0

 

# Base images 基础镜像

FROM centos

 

#MAINTAINER 维护者信息

MAINTAINER tianfeiyu

 

#ENV 设置环境变量

ENV PATH /usr/local/nginx/sbin:$PATH

 

#ADD  文件放在当前目录下,拷过去会自动解压

ADD nginx-1.8.0.tar.gz /usr/local/ 

ADD epel-release-latest-7.noarch.rpm /usr/local/ 

 

#RUN 执行以下命令

RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm

RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all

RUN useradd -s /sbin/nologin -M www

 

#WORKDIR 相当于cd

WORKDIR /usr/local/nginx-1.8.0

 

RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install

 

RUN echo "daemon off;" >> /etc/nginx.conf

 

#EXPOSE 映射端口

EXPOSE 80

 

#CMD 运行以下命令

CMD ["nginx"]

复制代码

安装docker-compose

  1. 官方安装https://docs.docker.com/compose/install/
  1. 安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

(替换1.24.0更改版本)

2、给docker-compose添加执行权限

       sudo chmod +x /usr/local/bin/docker-compose

3、测试

       docker-compose --version

       docker-compose version 1.24.0, build 1110ad01

2、离线安装https://github.com/docker/compose/releases(选择版本下载)

       1、选择稳定版

 

往下翻

             

  1. 上传下载的文件docker-compose-Linux-x86_64到/usr/local/bin
    1. 改名docker-compose
    2. sudo chmod +x /usr/local/bin/docker-compose (给docker-compose添加执行权限)
    3. 测试

       docker-compose --version

       docker-compose version 1.24.0, build 1110ad01

 

 

 

docker-compose命令

先来看一份 docker-compose.yml 文件,不用管这是干嘛的,只是有个格式方便后文解说:

 

复制代码

version: '2'

services:

  web:

    image: dockercloud/hello-world

    ports:

      - 8080

    networks:

      - front-tier

      - back-tier

 

  redis:

    image: redis

    links:

      - web

    networks:

      - back-tier

 

  lb:

    image: dockercloud/haproxy

    ports:

      - 80:80

    links:

      - web

    networks:

      - front-tier

      - back-tier

    volumes:

      - /var/run/docker.sock:/var/run/docker.sock

 

networks:

  front-tier:

    driver: bridge

  back-tier:

driver: bridge

复制代码

 

 

可以看到一份标准配置文件应该包含 version、services、networks 三大部分,其中最关键的就是 services 和 networks 两个部分,下面先来看 services 的书写规则。

 

 

 

 

一:常用参数:

1. image

services:

  web:

    image: hello-world

在 services 标签下的第二级标签是 web,这个名字是用户自己自定义,它就是服务名称。

image 则是指定服务的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。

例如下面这些格式都是可以的:

 

image: redis

image: ubuntu:14.04

image: tutum/influxdb

image: example-registry.com:4000/postgresql

image: a4bc65fd

 

 

2. build

 

 

2.1 基本用法

 

服务除了可以基于指定的镜像,还可以基于一份 Dockerfile,在使用 up 启动之时执行构建任务,这个构建标签就是 build,它可以指定 Dockerfile 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜像启动服务容器。

 

复制代码

# 指明绝对路径

build: /path/to/build/dir

 

# 指明相对路径,只要上下文确定就可以读取到 Dockerfile。

build: ./dir

 

# 设定上下文根目录,然后以该目录为准指定 Dockerfile。

build:

  context: ../

  dockerfile: path/of/Dockerfile

复制代码

注意 build 都是一个目录,如果你要指定 Dockerfile 文件需要在 build 标签的子级标签中使用 dockerfile 标签指定,如上面的例子。

如果你同时指定了 image 和 build 两个标签,那么 Compose 会构建镜像并且把镜像命名为 image 后面的那个名字。

 

build: ./dir

image: webapp:tag

 

 

 

 

2.2  构建过程中的args标签

 

既然可以在 docker-compose.yml 中定义构建任务,那么一定少不了 arg 这个标签,就像 Dockerfile 中的 ARG 指令,它可以在构建过程中指定环境变量,但是在构建成功后取消,在 docker-compose.yml 文件中也支持这样的写法:

 

build:

  context: .

  args:

    buildno: 1

    password: secret

 

 

下面这种写法也是支持的,一般来说下面的写法更适合阅读。

 

build:

  context: .

  args:

    - buildno=1

    - password=secret

 

 

与 ENV 不同的是,ARG 是允许空值的。例如:

 

args:

  - buildno

  - password

这样构建过程可以向它们赋值。

 

 

 

注意:YAML 的布尔值(true, false, yes, no, on, off)必须要使用引号引起来(单引号、双引号均可),否则会当成字符串解析。

 

 

3. command

使用 command 可以覆盖容器启动后默认执行的命令。

 

command: bundle exec thin -p 3000

也可以写成类似 Dockerfile 中的格式:

 

command: [bundle, exec, thin, -p, 3000]

 

4. container_name

前面说过 Compose 的容器名称格式是:<项目名称><服务名称><序号>

虽然可以自定义项目名称、服务名称,但是如果你想完全控制容器的命名,可以使用这个标签指定:

 

container_name: app

这样容器的名字就指定为 app 了。

 

 

5. depends_on

在使用 Compose 时,最大的好处就是少打启动命令,但是一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。

例如在没启动数据库容器的时候启动了应用容器,这时候应用容器会因为找不到数据库而退出,为了避免这种情况我们需要加入一个标签,就是 depends_on,这个标签解决了容器的依赖、启动先后的问题。

例如下面容器会先启动 redis 和 db 两个服务,最后才启动 web 服务:

 

version: '2'

services:

  web:

    build: .

    depends_on:

      - db

      - redis

  redis:

    image: redis

  db:

    image: postgres

注意的是,默认情况下使用 docker-compose up web 这样的方式启动 web 服务时,也会启动 redis 和 db 两个服务,因为在配置文件中定义了依赖关系。

 

 

 

 

 

6. ports

映射端口的标签。

使用主机端口:容器端口格式 或者 只是指定容器的端口,宿主机会随机映射端口。

 

ports:

 - "3000"

 - "8000:8000"

 - "49100:22"

 - "127.0.0.1:8001:8001"

注意:当使用主机端口:宿主机端口格式来映射端口时,如果你使用的容器端口小于60你可能会得到错误得结果,因为YAML将会解析xx:yy这种数字格式为60进制,所以建议使用字符串格式

 

 

 

 

7. links

还记得上面的depends_on吧,那个标签解决的是启动顺序问题,这个标签解决的是容器连接问题,与Docker client的--link一样效果,会连接到其它服务中的容器。

格式如下:

 

links:

 - db

 - db:database

 - redis

使用的别名将会自动在服务容器中的/etc/hosts里创建。例如:

 

172.12.2.186  db

172.12.2.186  database

172.12.2.187  redis

相应的环境变量也将被创建。

 

 

 

 

 

8. volumes

挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER] 这样的格式,或者使用 [HOST:CONTAINER:ro] 这样的格式,后者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的文件系统。

Compose的数据卷指定路径可以是相对路径,使用 . 或者 .. 来指定相对目录。

数据卷的格式可以是下面多种形式:

 

复制代码

volumes:

  # 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。

  - /var/lib/mysql

 

  # 使用绝对路径挂载数据卷

  - /opt/data:/var/lib/mysql

 

  # 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。

  - ./cache:/tmp/cache

 

  # 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。

  - ~/configs:/etc/configs/:ro

 

  # 已经存在的命名的数据卷。

  - datavolume:/var/lib/mysql

复制代码

 

 

如果你不使用宿主机的路径,你可以指定一个volume_driver。 比如 -->   volume_driver: mydriver

 

 

 

 

9. environment

与上面的 env_file 标签完全不同,反而和 arg 有几分类似,这个标签的作用是设置镜像变量,它可以保存变量到镜像里面,也就是说启动的容器也会包含这些变量设置,这是与 arg 最大的不同。

一般 arg 标签的变量仅用在构建过程中。而 environment 和 Dockerfile 中的 ENV 指令一样会把变量一直保存在镜像、容器中,类似 docker run -e 的效果,两种写法。

 

复制代码

environment:

  RACK_ENV: development

  SHOW: 'true'

  SESSION_SECRET:

 

environment:

  - RACK_ENV=development

  - SHOW=true

  - SESSION_SECRET

复制代码

 

 

 

 

 

10. external_links

在使用Docker过程中,我们会有许多单独使用docker run启动的容器,为了使Compose能够连接这些不在docker-compose.yml中定义的容器,我们需要一个特殊的标签,就是external_links,它可以让Compose项目里面的容器连接到那些项目配置外部的容器(前提是外部容器中必须至少有一个容器是连接到与项目内的服务的同一个网络里面)。

格式如下:

 

external_links:

 - redis_1

 - project_db_1:mysql

 - project_db_1:postgresql

 

 

非常用参数

 

1.dns

和 --dns 参数一样用途,格式如下:

 

dns: 8.8.8.8

也可以是一个列表:

 

dns:

  - 8.8.8.8

  - 9.9.9.9

此外 dns_search 的配置也类似:

 

dns_search: example.com

dns_search:

  - dc1.example.com

  - dc2.example.com

2. tmpfs

挂载临时目录到容器内部,与 run 的参数一样效果:

 

tmpfs: /run

tmpfs:

  - /run

  - /tmp

3. entrypoint

在 Dockerfile 中有一个指令叫做 ENTRYPOINT 指令,用于指定接入点,第四章有对比过与 CMD 的区别。

在 docker-compose.yml 中可以定义接入点,覆盖 Dockerfile 中的定义:

 

entrypoint: /code/entrypoint.sh

格式和 Docker 类似,不过还可以写成这样:

 

entrypoint:

    - php

    - -d

    - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so

    - -d

    - memory_limit=-1

    - vendor/bin/phpunit

4.env_file

还记得前面提到的 .env 文件吧,这个文件可以设置 Compose 的变量。而在 docker-compose.yml 中可以定义一个专门存放变量的文件。

如果通过 docker-compose -f FILE 指定了配置文件,则 env_file 中路径会使用配置文件路径。

 

如果有变量名称与 environment 指令冲突,则以后者为准。格式如下:

 

env_file: .env

或者根据 docker-compose.yml 设置多个:

 

env_file:

  - ./common.env

  - ./apps/web.env

  - /opt/secrets.env

注意的是这里所说的环境变量是对宿主机的 Compose 而言的,如果在配置文件中有 build 操作,这些变量并不会进入构建过程中,如果要在构建中使用变量还是首选前面刚讲的 arg 标签。

 

5. expose

这个标签与Dockerfile中的EXPOSE指令一样,用于指定暴露的端口,但是只是作为一种参考,实际上docker-compose.yml的端口映射还得ports这样的标签。

 

expose:

 - "3000"

 - "8000"

6. extra_hosts

添加主机名的标签,就是往/etc/hosts文件中添加一些记录,与Docker client的--add-host类似:

 

extra_hosts:

 - "somehost:162.242.195.82"

 - "otherhost:50.31.209.229"

启动之后查看容器内部hosts:

 

162.242.195.82  somehost

50.31.209.229   otherhost

7. labels

向容器添加元数据,和Dockerfile的LABEL指令一个意思,格式如下:

 

labels:

  com.example.description: "Accounting webapp"

  com.example.department: "Finance"

  com.example.label-with-empty-value: ""

labels:

  - "com.example.description=Accounting webapp"

  - "com.example.department=Finance"

  - "com.example.label-with-empty-value"

 

8. logging

这个标签用于配置日志服务。格式如下:

 

logging:

  driver: syslog

  options:

    syslog-address: "tcp://192.168.0.42:123"

默认的driver是json-file。只有json-file和journald可以通过docker-compose logs显示日志,其他方式有其他日志查看方式,但目前Compose不支持。对于可选值可以使用options指定。

有关更多这方面的信息可以阅读官方文档:

https://docs.docker.com/engine/admin/logging/overview/

 

 

9. pid

pid: "host"

将PID模式设置为主机PID模式,跟主机系统共享进程命名空间。容器使用这个标签将能够访问和操纵其他容器和宿主机的名称空间。

 

 

10. security_opt

为每个容器覆盖默认的标签。简单说来就是管理全部服务的标签。比如设置全部服务的user标签值为USER。

 

security_opt:

  - label:user:USER

  - label:role:ROLE

11. stop_signal

设置另一个信号来停止容器。在默认情况下使用的是SIGTERM停止容器。设置另一个信号可以使用stop_signal标签。

 

stop_signal: SIGUSR1

 

12. volumes_from

从其它容器或者服务挂载数据卷,可选的参数是 :ro或者 :rw,前者表示容器只读,后者表示容器对数据卷是可读可写的。默认情况下是可读可写的。

 

volumes_from:

  - service_name

  - service_name:ro

  - container:container_name

  - container:container_name:rw

13. cap_add, cap_drop

添加或删除容器的内核功能。详细信息在前面容器章节有讲解,此处不再赘述。

 

cap_add:

  - ALL

 

cap_drop:

  - NET_ADMIN

  - SYS_ADMIN

14. cgroup_parent

指定一个容器的父级cgroup。

 

cgroup_parent: m-executor-abcd

15. devices

设备映射列表。与Docker client的--device参数类似。

 

devices:

  - "/dev/ttyUSB0:/dev/ttyUSB0"

16. extends

这个标签可以扩展另一个服务,扩展内容可以是来自在当前文件,也可以是来自其他文件,相同服务的情况下,后来者会有选择地覆盖原有配置。

 

extends:

  file: common.yml

  service: webapp

用户可以在任何地方使用这个标签,只要标签内容包含file和service两个值就可以了。file的值可以是相对或者绝对路径,如果不指定file的值,那么Compose会读取当前YML文件的信息。

更多的操作细节在后面的12.3.4小节有介绍。

 

 

17. network_mode

网络模式,与Docker client的--net参数类似,只是相对多了一个service:[service name] 的格式。

例如:

 

network_mode: "bridge"

network_mode: "host"

network_mode: "none"

network_mode: "service:[service name]"

network_mode: "container:[container name/id]"

可以指定使用服务或者容器的网络。

 

 

18. networks

加入指定网络,格式如下:

 

services:

  some-service:

    networks:

     - some-network

     - other-network

关于这个标签还有一个特别的子标签aliases,这是一个用来设置服务别名的标签,例如:

 

services:

  some-service:

    networks:

      some-network:

        aliases:

         - alias1

         - alias3

      other-network:

        aliases:

         - alias2

相同的服务可以在不同的网络有不同的别名。

 

 

19. 其它

还有这些标签:cpu_shares, cpu_quota, cpuset, domainname, hostname, ipc, mac_address, mem_limit, memswap_limit, privileged, read_only, restart, shm_size, stdin_open, tty, user, working_dir

上面这些都是一个单值的标签,类似于使用docker run的效果。

 

cpu_shares: 73

cpu_quota: 50000

cpuset: 0,1

 

user: postgresql

working_dir: /code

 

domainname: foo.com

hostname: foo

ipc: host

mac_address: 02:42:ac:11:65:43

 

mem_limit: 1000000000

memswap_limit: 2000000000

privileged: true

 

restart: always

 

read_only: true

shm_size: 64M

stdin_open: true

tty: true

 

附上一个简单的Dockerfile

FROM java:8
VOLUME /tmp
ADD hiynn-dockertest-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]


简单docker-compose

version: '3'
services:
  spring:
   container_name: dockertest
   restart: always
   build:
    context: ../study
    dockerfile: Dockerfile
   image: dockertest:1.0
   ports:
    - "9980:9980"
   depends_on:
      - mysql
      - redis
   networks:
     dockertest:
       aliases:
          - spring
  rabbitmq:
   container_name: rabbitmq
   restart: always
   image: rabbitmq:3.7.15-management
   ports:
    - "15672:15672"
    - "5672:5672"
   #environment:            #此处放到rabbitmq.conf中配置
    #RABBITMQ_DEFAULT_USER: joe
    #RABBITMQ_DEFAULT_PASS: joe
    #RABBITMQ_DEFAULT_VHOST: /vhost
   volumes:
    - ./rabbitmq/conf/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
   networks:
     dockertest:
       aliases:
          - rabbitmq       
  mongo:
   container_name: mongo
   restart: always
   image: mongo:3.4.20
   ports:
    - "27017:27017"
   environment:
    MONGO_INITDB_ROOT_USERNAME: root
    MONGO_INITDB_ROOT_PASSWORD: 123456
   volumes:
    - "./mongo/data/db:/data/db"
    - "./mongo/etc/localtime:/etc/localtime"
   networks:
     dockertest:
       aliases:
          - mongo
  mysql:
   container_name: mysql
   restart: always
   image: mysql:5.7.26
   volumes:
    - ./mysql/data/:/var/lib/mysql #映射数据目录
    - ./mysql/conf/my.cnf:/etc/mysql/my.cnf #映射配置文件
   ports:
    - "3306:3306"
   environment:
    - MYSQL_ROOT_PASSWORD=123456
   networks:
     dockertest:
       aliases:
          - mysql
  redis:
   container_name: redis
   command: redis-server /usr/local/etc/redis/redis.conf #指定redis容器使用的配置文件
   restart: always
   image: redis:5.0.3
   ports:
    - "6339:6339"
   volumes:
    - ./redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
    - ./redis/data:/data
   networks:
     dockertest:
       aliases:
         - redis
networks:
   dockertest:
     driver: bridge
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值