Dockerfile は、Docker イメージを構築するために使用されるテキスト ファイルであり、イメージの構築に必要な命令とパラメーターで構成されるスクリプトです。
1: 各予約語命令 は大文字の
であり、その後に少なくとも 1 つのパラメーターが続く必要があります
2: 命令は次のとおりです。上記と同様に一番下に移動して順番に実行します
3: # はコメントを表します
4: 各命令は新しいイメージ レイヤーを作成し、イメージを送信します
(1) docker はベース イメージからコンテナを実行します
(2) 命令を実行し、コンテナに変更を加えます
(3) docker commit と同様の操作を実行して、新しいファイルを送信しますイメージ レイヤー
(4) Docker は送信されたばかりのイメージに基づいて新しいコンテナを実行します
(5) すべての命令が実行されるまで、dockerfile 内の次の命令を実行します
アプリケーション ソフトウェアの観点から見ると、Dockerfile、Docker イメージ、Docker コンテナはそれぞれソフトウェアの 3 つの異なる段階を表します。
Dockerfile はソフトウェアです 原材料
Docker イメージはソフトウェアの成果物です
Docker コンテナは実行中のコンテナと見なすことができますソフトウェアイメージの状態、つまりイメージに従って動作する コンテナインスタンス
Dockerfileは開発指向、Dockerイメージは配信標準、Dockerコンテナはデプロイと運用保守を行う この3つは不可欠であり、一緒に行う必要があります。これらは Docker システムの基礎として機能します。
1 Dockerfile、プロセスに必要なものすべてを定義する Dockerfile を定義する必要があります。 Dockerfile に関係するコンテンツには、実行コードまたはファイル、環境変数、依存パッケージ、ランタイム環境、ダイナミック リンク ライブラリ、オペレーティング システムの配布、サービス プロセスおよびカーネル プロセスが含まれます (アプリケーション プロセスがシステム サービスおよびカーネル プロセスを処理する必要がある場合、このプロセスは名前空間の権限制御をどのように設計するかなどを検討する必要があります。;
2 Docker イメージ、Dockerfile でファイルを定義した後、docker build 時に Docker イメージが生成され、その Docker イメージが実行されると実際に起動しますサービスを提供する;
3 Docker コンテナの場合、コンテナはサービスを直接提供します。
基本的な構築手順: (1) Dockerfile ファイルを作成します (2) docker build コマンドでイメージを構築します (3) docker run でイメージに従ってコンテナー インスタンスを実行します
基本イメージ。現在の新しいイメージはどのイメージに基づいていますか? 既存のイメージをテンプレートとして指定します。最初のコマンドは FROM
# 命令格式 FROM [--platform=<platform>] <image> [AS <name>] FROM [--platform=<platform>] <image>[:<tag>] [AS <name>] FROM [--platform=<platform>] <image>[@<digest>] [AS <name>] # 实例: FROM centos:7.0# である必要があります##2. MAINTAINER と LABELイメージ管理者の名前と電子メール アドレス
# 命令格式 MAINTAINER <name>このコマンドは非推奨になりました。必要なメタデータを設定できる LABEL をお勧めします。
# 命令格式 LABEL <key>=<value> <key>=<value> <key>=<value> ... LABEL "com.example.vendor"="ACME Incorporated" LABEL com.example.label-with-value="foo" LABEL version="1.0" LABEL description="This text illustrates \ that label-values can span multiple lines."3. RUNコンテナのビルド時に実行する必要があるコマンドです。RUN は docker build 中に実行されます(1)シェル形式 (一般的に使用されます)
# <命令行命令> 等同于,在终端操作的shell命令 RUN <命令行命令>(2) 実行形式
# 录入:RUN ["./test.php", "dev", "offline"] 等价于RUN ./test.php dev offline RUN ["可执行文件", "param1", "param2"]4, EXPOSE現在のコンテナによって外部に公開されるポート
EXPOSE 80 EXPOSE 80/tcp EXPOSE 80/udp5, WORKDIRコンテナの作成時に指定 その後、ターミナルはデフォルトでログインし、作業ディレクトリに入ります 開始点は
WORKDIR /path/to/workdir6 です USER は実行するユーザーを指定しますどちらも指定されていない場合、デフォルトは root
# 命令格式 USER <user>[:<group>] USER <UID>[:<GID>] # 实例 USER cxf7、ENV はイメージ構築プロセス中に環境変数を設定するために使用されます
# 命令格式 ENV <key>=<value> ... # 实例 ENV MY_PATH /usr/mytest #这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量, #比如:WORKDIR $MY_PATH8、ADDホスト ディレクトリ内のファイルをイメージにコピーします。すると、URL が自動的に処理され、tar 圧縮パッケージが解凍されます。
ADD a.tar.gz /mydir/9, COPY (ADD と同様に、ファイルをコピーします)そしてイメージへのディレクトリ。
ファイル/ディレクトリをビルド コンテキスト ディレクトリの からイメージの新しいレイヤーの の場所にコピーします
COPY src dest COPY ["src", "dest"] <src源路径>:源文件或者源目录 <dest目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。10, VOLUMEコンテナ データ ボリューム。データ ストレージと永続化に使用されます。11、CMDコンテナの起動後に行うことを指定します。注意! Dockerfile には複数の CMD 命令を含めることができますが、
最後の命令のみが有効になります。CMD は、docker run 後にパラメータに置き換えられます。
CMD ["executable","param1","param2"] CMD ["param1","param2"] CMD command param1 param2 # 覆盖默认的CMD,不会启动tomcat docker exec -it comcat /bin/bashCMD は、docker run 時に実行されます。 RUN は docker のビルド中に実行されます。 12. ENTRYPOINT は、コンテナーの起動時に実行するコマンドを指定するためにも使用されます。 CMD コマンドと似ていますが、
ENTRYPOINT は docker run 後のコマンドによって上書きされず、これらのコマンド ライン パラメータ
は、コマンドによって指定されたプログラムへのパラメータとして使用されます。 ENTRYPOINT command
# 命令格式 ENTRYPOINT ["executable", "param1", "param2"] ENTRYPOINT command param1 param2ENTRYPOINT は CMD と一緒に使用できます。通常、CMD はパラメータを変更するために使用されます。ここでの CMD は ENTRYPOINT にパラメータを渡すことと同じです。
ENTRYPOINT を指定すると、CMD の意味が変わります。コマンドを直接実行する代わりに、CMD の内容がパラメータとして ENTRYPOINT 命令に渡されます。この 2 つの組み合わせは次のようになります: FROM ubuntu
ENTRYPOINT ["top", "-b"] # 定参
CMD ["-c"] # 变参
# 最终执行top -c,而如果使用命令行指定 -H,会替换CMD的-c
# 注意大写字母D vi Dockerfile
# 指定基础镜像,需要保证本地有这个镜像 FROM centos # 指定作者邮箱 MAINTAINER cxf # 工作目录 ENV MYPATH /usr/local WORKDIR $MYPATH # 准备工作 RUN cd /etc/yum.repos.d/ RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* RUN yum makecache RUN cd /usr/local #安装vim编辑器 RUN yum -y install vim #安装ifconfig命令查看网络IP RUN yum -y install net-tools #安装java8及lib库 RUN yum -y install glibc.i686 RUN mkdir /usr/local/java #ADD 是相对路径jar,把jdk-8u351-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置 ADD jdk-8u351-linux-x64.tar.gz /usr/local/java/ #配置java环境变量 ENV JAVA_HOME /usr/local/java/jdk1.8.0_351 ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH ENV PATH $JAVA_HOME/bin:$PATH EXPOSE 80 CMD echo $MYPATH CMD echo "success--------------ok" CMD /bin/bash
注意!本目录下只有一个Dockerfile并且包含jdk安装包
# 构建新镜像命令格式 。注意,上面TAG后面有个空格,有个点 docker build -t 新镜像名字:TAG . # 构建我们的镜像,等一会就会构建成功 docker build -t centosjava8:1.0 . [root@localhost myfile]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centosjava8 1.0 4dbff0755585 34 seconds ago 747MB centos latest 5d0da3dc9764 19 months ago 231MB
docker run -it 4dbff0755585 /bin/bash #我们发现,新的镜像携带着vim、ifconfig和java环境了!
仓库名、标签都是
(1)创建Dockerfile
FROM centos CMD echo 'action is success'
(2)构建
docker build .
(3)查看
[root@localhost xu]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centosjava8 1.0 4dbff0755585 31 minutes ago 747MB <none> <none> 9818ccf3738e 19 months ago 231MB centos latest 5d0da3dc9764 19 months ago 231MB # 查看所有虚悬镜像 [root@localhost xu]# docker image ls -f dangling=true REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 9818ccf3738e 19 months ago 231MB
(4)删除
# 删除虚悬镜像 docker image prune
虚悬镜像已经失去存在价值,可以删除
编写一个测试Controller,以供测试。
@RestController @RequestMapping public class TestController { @GetMapping("/test") public String test(){ return "启动成功 ===================test"; } }
我们使用maven package命令手动打包并上传到服务器上。
[root@localhost ~]# cd mydocker/ [root@localhost mydocker]# ll total 17084 -rw-r--r--. 1 root root 17491177 Apr 9 14:18 demo-0.0.1-SNAPSHOT.jar
注!通常来说这一步可以使用jenkins自动构建。
# 基础镜像使用java FROM centosjava8:1.0 # 作者 MAINTAINER cxf # VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名为cxf_docker.jar ADD demo-0.0.1-SNAPSHOT.jar /cxf_docker.jar # 运行jar包 RUN bash -c 'touch /cxf_docker.jar' ENTRYPOINT ["java","-jar","/cxf_docker.jar"] #暴露6001端口作为微服务 EXPOSE 8088
docker build -t mydemo:1.0 . [root@localhost mydocker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mydemo 1.0 7124eca083ad 26 seconds ago 764MB centosjava8 1.0 4dbff0755585 7 hours ago 747MB
docker run -d -p 8088:8088 7124eca083ad
访问服务器我们的接口,发现测试成功!
以上がdockerfile を使用して springboot プロジェクトをデプロイする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。