記事のディレクトリ
基本的な考え方
ドッカーが使用中に簡単に感謝、それは鏡と容器の中に構築するために開始します。
ミラーの構築:必要なインストールと動作環境、プログラム・コードが含まれているミラーの作成、などが挙げられます。作成プロセスが完了するまでにdockerfileを使用することです。
コンテナを起動します。コンテナが最後に起動して実行する一連の命令を実行して、サービスを開始するために、構成された画像を引いている(例えば、ポートマッピングなどの外部データの読み込み、環境変数、)。
1)ドッカー実行によって実行することができ、単一の容器について。
2)操作は、サービスオーケストレーションなどの容器(複数を含む場合)ドッカー-COMPOSEによって達成することができ、容易に)コースだけ、これらのいずれかを実行することで(サービスとして複数の容器を操作し、提供することができますスケール(サービス拡大)機能。
3)たとえば、ミラー、ミラーnginxのをMySQLやミラーPHPを持っています。あなたがドッキングウィンドウ・コンがない場合は、起動するたびので、あなたは、各コンテナのパラメータ、環境変数、船名をノック開始する必要があり、かなり煩わしく、一連の操作に、異なるコンテナのリンクパラメータを指定します。しかし、ドッキングウィンドウ・作曲を使用した後、あなたは一度だけ書き込みドッキングウィンドウ-composer.ymlファイルにあなたが(3個のコンテナを含む)全体の環境を起動するたびにこれらのコマンドを置くことができ、あなただけのドッキングウィンドウ・作曲をノックアップコマンドOK。
そしてdockerfile役割は、鏡にゼロから構築されます。
二つの全くないと同じこと
簡単な要約:
-
dockerfile:ミラーの構築。
-
ドッキングウィンドウの実行:コンテナを開始します。
-
ドッキングウィンドウ - コン:サービスを開始します。
詳細なファイルDockerfile
Dockerfileは何ですか?
Dockerfileは、合成画像のためのコマンドが含まれているテキストファイルです。コマンドライン上で任意のコマンドを呼び出すために使用することができます。読み取ることによってドッカーDockerfile
画像命令の自動生成を。
docker build
コマンドはDockerfileからイメージを構築するために使用されます。あなたはできるdocker build
コマンドの使用-f
ファイルシステムDockerfileのどこかにフラグを。
例:
docker build -f /path/to/a/Dockerfile
Dockerfileの基本的な構造
Dockerfileは、一般的に4つの部分に分かれ:管理者情報を実行し、基本画像情報、命令とイメージコンテナは、コマンドを起動し、「#」はコメントDockerfileです。
Dockerfileファイル説明
ドッカーDockerfile命令は、上から下の順序に実行します。ベース画像を指定するために、最初の命令でなければならないFROM。文#
の文字の先頭には、コメントとみなされます。ドッカーファイルがで使用することができ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 [email protected]
MAINTAINER Jasper Xu <[email protected]>
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:Configurationコンテナは、それが指向実行可能に。CMDは、「アプリケーション」で保存パラメータのみを使用することができます。
格式:
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:ユーザー名または指定されたコンテナ、その後のRUNが指定したユーザーを使用しますUIDラン。ユーザーが指定したユーザを使用する場合、ユーザは、名前、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"]
注:ドッカーインテリア自体はそれほどファイルパスのように、Linuxベースである:は/ usr / local /にlinuxである
dockerfileのタイムゾーンの問題を解決する、あなたはコマンドを追加することができます。
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
最後に、一般的に使用されるコマンドの意味を説明するためのチャート-
Dockerfileからミラーの構築
Dockerfileを作成したら、Dockerfileに基づいて画像を構築するためにドッキングウィンドウのビルドコマンドを使用することができます。
- まずDockerfileを準備します。
- ビルドコマンドを実行します。第二:. V1.0の-tドッキングウィンドウのビルド
ノートは最終的にポイントを持っている.
Dockerfileビルド、使用して現在のパスを表す、
-t SECOND ,:秒という名前の新しいイメージを構築するためのv1.0を、セットのバージョンをv1.0をします。
- ドッキングウィンドウのビルド:ミラーDockerfileを構築するために使用されるコマンドキーワード。
- [OPTIONS]:名前ミラーの-t指定など、コマンドオプション、一般的に使用されるコマンド、
- (電流経路にDockerfileない)-f指定された表示ファイルに構築ミラーDockerfile、
例えば:docker build -f /path/to/a/Dockerfile
- あなたは-fを使用しない場合、デフォルトのファイル名は、ミラーリング「Dockerfile」を構築すると考えられ、コンテキスト・パスの下にDockerfileです。
- コンテキストパス| URL:指定プロセスでミラーリングミラーリング建物のビルド・パスコンテキスト、および唯一の任意のドキュメントのコンテキストで参照することができます。
ドッキングウィンドウ・コン文書や受注
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 的书写规则。
build命令:
服务除了可以基于指定的镜像,还可以基于一份 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
既然可以在 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ブール値(真、偽、はい、いいえ 、オフ、オン)を引用符で囲む必要がありそうでない場合は、文字列解析として扱われます、(単一引用符、二重引用符は使用可能です)。
ドッキングウィンドウ・コン一般的に使用されるコマンド:
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容器
参考記事:
http://www.imooc.com/wenda/detail/425491
https://blog.csdn.net/jiangyu1013/article/details/79967440
https://www.cnblogs.com/panwenbin-logs/p /8007348.html
https://blog.csdn.net/Aria_Miazzy/article/details/89326829
https://www.cnblogs.com/moxiaoan/p/9299404.html