内容简介:一般的,vim Dockerfile
一、Dockerfile基本命名
指令 | 说明 | 备注 |
---|---|---|
FROM | 指定所创建镜像的基础镜像 | 第一条指令必须为 FROM 指令。 格式为 FROM <image> 或 FROM <image>:<tag> 。 |
MAINTAINER | 指定维护者信息 | 格式为 MAINTAINER <name> |
RUN | 运行命令 | 在镜像中要执行的命令,格式为 RUN <command> 或 RUN ["executable", "param1", "param2"] 。前者默认将在 shell 终端中运行命令,即 /bin/bash -c ;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN [“/bin/bash”, “-c”,”echo hello”] 。每条RUN指令将在当前镜像的基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用换行。例如: RUN apt-get update \&& apt-get install -ylibsnappy-dev zliblg-dev libbz2-dev \&& rm -rf /var/cache/apt |
CMD | 指定启动容器时默认执行的命令 | 支持三种格式:1. CMD["executable","param1","param2"] 使用 exec 执行,推荐方式 ;2. CMD command param1 param2 在 /bin/bash 中执行,提供给需要交互的应用;3. CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数; |
LABEL | 指定生成镜像的元数据标签信息 | |
EXPOSE | 声明镜像内服务所监听的端口 | 指定容器要打开的端口 |
ENV | 指定环境变量 | 格式为 ENV <key> <value> 。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。 |
ADD | 赋值指定的路径下的内容到容器中的路径下,可以为URL;如果为tar文件,会自动解压到路径下 | 相当于 COPY ,但是比 COPY 功能更强大 |
COPY | 赋值本地主机的路径下的内容到容器中的路径下;一般情况下推荐使用 COPY 而不是 ADD |
复制本地主机的 (为 Dockerfile 所在目录的相对路径)到容器中的 |
ENTRYPOINT | 指定镜像的默认入口 | |
VOLUME | 创建数据挂载点 | 挂载目录,格式为 VOLUME ["/data"] |
USER | 指定运行容器时的用户名或UID | |
WORKDIR | 配置工作目录 | 指定当前工作目录,相当于 cd |
ARG | 指定镜像内使用的参数(例如版本号信息等) | |
ONBUILD | 配置当前所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作的命令 | |
STOPSIGNAL | 容器退出的信号 | |
HEALTHCHECK | 如何进行健康检查 | |
SHELL | 指定使用 SHELL 时的默认SHELL类型 |
二、Dockerfile 基本结构
一般的, Dockerfile
分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。’#’ 为 Dockerfile 中的注释。先看下面一个小例子:
# 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"]
三、构建镜像
3.1 编写Dockerfile文件
vim Dockerfile
FROM alpine:latest MAINTAINER troy CMD echo "Hello Workd!"
3.2 构建镜像
docker build -t hello_world .
3.3 运行镜像
docker run hello_world
记:
1.表示当前用户使用的shell是/bin/bash,所谓的shell你可以理解为 操作系统和人之间交互的平台 。例如windows系统的桌面环境就是一个shell。
bin目录中基本上都是可执行的命令。
启动容器并启动bash( 交互方式
):
$docker run -i -t <image_name/continar_id> /bin/bash
2.保存对容器的修改(commit) 当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。
$docker commit ID new_image_name
当然如果在保存成新镜像的时候想添加新的 dockerfile命令,比如,启动进入新的目录。
docker commit -c "WORKDIR /usr/bin" 07c5f9ed32b0 test-images
当然你也可以在旧镜像的基础上写一个新的dockerfile,用dockerfile生成新的镜像。
Note: image相当于类,container相当于实例 ,不过可以动态给实例安装新软件,然后把这个container用commit命令固化成一个image。
四、Docker-Compose
一句话:docker-compose 是用来做 docker 的 多容器控制 ,是一个用来把 docker 自动化的东西。有了 docker-compose 你可以把所有繁复的 docker 操作全都一条命令,自动化的完成。
4.1 常用命令
docker-compose up -d nginx 构建建启动nignx容器 docker-compose exec nginx bash 登录到nginx容器中 docker-compose down 删除所有nginx容器,镜像 docker-compose ps 显示所有容器 docker-compose restart nginx 重新启动nginx容器 docker-compose run --no-deps --rm php-fpm php -v 在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器 docker-compose build nginx 构建镜像 。 docker-compose build --no-cache nginx 不带缓存的构建。 docker-compose logs nginx 查看nginx的日志 docker-compose logs -f nginx 查看nginx的实时日志 docker-compose config -q 验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。 docker-compose events --json nginx 以json的形式输出nginx的docker日志 docker-compose pause nginx 暂停nignx容器 docker-compose unpause nginx 恢复ningx容器 docker-compose rm nginx 删除容器(删除前必须关闭容器) docker-compose stop nginx 停止nignx容器 docker-compose start nginx 启动nignx容器
4.2 docker-compose.yml
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 两个服务,因为在配置文件中定义了依赖关系。
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
相应的环境变量也将被创建。
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
volumes_from
从其它容器或者服务挂载数据卷,可选的参数是 :ro或者 :rw,前者表示容器只读,后者表示容器对数据卷是可读可写的。默认情况下是可读可写的。
volumes_from: - service_name - service_name:ro - container:container_name - container:container_name:rw
以上所述就是小编给大家介绍的《Dockerfile、Docker-Compose基本命令与介绍》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Git介绍与常用命令
- Redis 命令、特性介绍与性能调优
- 【redis专题(2)】命令语法介绍之string
- 【redis专题(3)】命令语法介绍之list
- 【redis专题(5)】命令语法介绍之sets
- Ansible常用Ad-Hoc命令介绍
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ACM国际大学生程序设计竞赛题解
赵端阳//袁鹤 / 电子工业 / 2010-6 / 38.00元
《ACM国际大学生程序设计竞赛题解(1)》可以作为高等院校有关专业的本科和大专学生参加国际大学生程序设计竞赛的辅导教材,或者作为高等院校数据结构、C/C++程序设计或算法设计与分析等相关课程的教学参考书。随着各大专院校参加ACM/ICPC热情的高涨,迫切需要有关介绍ACM国际大学生程序设计竞赛题解的书籍。《ACM国际大学生程序设计竞赛题解(1)》根据浙江大学在线题库的前80题,进行了解答(个别特别......一起来看看 《ACM国际大学生程序设计竞赛题解》 这本书的介绍吧!