Docker および Dockerfile の一般的なコマンドの概要と、マイクロサービス用の Docker イメージのパッケージ化

1. Dockerの共通コマンドまとめ

ここに画像の説明を挿入

1.ヘルプコマンド

# 查看docker的所有命令详情
docker --help

# 查看docker对应命令的使用详情
docker 命令 --help

# 如:查看docker images的使用方法
docker images --help

[root@fussy ~]# docker images --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show image IDs

2. ミラーリングコマンド

# 从DockerHub上查询nginx镜像
docker search nginx
[root@fussy ~]# docker search nginx
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                             Official build of Nginx.                        16041     [OK]       
jwilder/nginx-proxy               Automated Nginx reverse proxy for docker con…   2104                 [OK]
richarvey/nginx-php-fpm           Container running Nginx + PHP-FPM capable of…   820                  [OK]

# 拉取nginx镜像
docker pull nginx

# 拉取nginx指定版本镜像
docker pull nginx:1.9

# 查看所有镜像
docker images -a
[root@fussy nginx]# docker images -a
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
centos       latest    5d0da3dc9764   3 months ago     231MB

# 修改镜像的版本信息(原镜像不变,生成一个修改版本信息后的副本镜像)
docker tag 源镜像:TAG 目标镜像:TAG
docker tag centos:latest my/centos:1.0
[root@fussy nginx]# docker tag centos:latest my/centos:1.0
[root@fussy nginx]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
centos       latest    5d0da3dc9764   3 months ago     231MB
my/centos    1.0       5d0da3dc9764   3 months ago     231MB

# 查看所有镜像的ID
docker images -aq
[root@fussy nginx]# docker images -aq
92b28ed32bef
5d0da3dc9764

# 删除指定的镜像
docker rmi -f 镜像

# 删除所有的镜像
docker rmi -f $(docker images -aq)

# 查询指定镜像详情
docker inspect 镜像
docker inspect centos

# 构建镜像
docker build -f 文件所在路径 -t 生成的镜像名称:TAG .
docker build -f Dockerfile -t myimages:1.0 .

3. コンテナコマンド

# 启动容器
docker run 镜像
docker run centos

# 启动容器并进入命令行
docker run -it 镜像

# 启动容器并后台运行
docker run -d 镜像

# 启动容器并指定自定义的网络
docker run --net mynet 镜像

# 启动容器并指定容器名称,同时进入容器的命令行
docker run -it --name centos01 --net mynet centos /bin/bash

# 启动容器并指定端口映射(可指定多个)
docker run -p 主机端口:容器端口 镜像
docker run -p 3500:80 -p 3600:8080 nginx

# 启动容器并随机映射端口
docker run -P 镜像

# 启动容器并指定具名数据卷(可指定多个)
docker run -v 主机路径:容器路径 镜像
docker run -v /usr/local/nginx/conf:/etc/nginx -v /usr/local/mysql/data:/etc/mysql/data 镜像

# 查看容器详情
docker inspect 容器名称或容器ID

# 进入指定的容器
# 第一种方式(重新进入命令行)
docker exec -it 容器名称或容器ID /bin/bash
docker exec -it 44a231940d74 /bin/bash
[root@fussy nginx]# docker exec -it 44a231940d74 /bin/bash
[root@44a231940d74 /]# 

# 第二种方式(进入上一次的命令行)
docker attach 容器名称或容器ID
docker attach 44a231940d74
[root@fussy nginx]# docker attach 44a231940d74
[root@44a231940d74 /]# 

# 退出并停止容器
exit

# 退出但不停止容器
ctrl + q + p

# 查看所有运行的容器
docker ps

# 查看所有容器(包括停止的)
docker ps -a

# 查看所有容器的ID
docker ps -aq

# 删除所有容器
docker rm -f $(docker ps -aq)

# 停止、启动容器
docker stop/start 容器名称或容器ID

# 将容器提交到仓库中,变成一个镜像
docker commit -m  提交信息  -a  作者  容器名称或容器ID  镜像名称:TAG
docker commit -m '第一次提交' -a 'liulusheng' ccff597ebb23 myimages:1.0

4. ネットワークコマンド

# 查看docker的所有网络
docker network ls

# 查看对应网络的详细信息
docker network inspect 网络名称或网络ID
docker network inspect mynet
[root@fussy ~]# docker network inspect mynet
[
    {
    
    
        "Name": "mynet",
        "Id": "447f6cf844a45e15bc746a7c97736ed61937b19b29f40b3b9d8bb364de26d949",
        "Created": "2021-12-30T13:48:14.4242933+08:00",
        "Scope": "local",
        "Driver": "bridge",
]


# 创建自定义网络
docker network create -d 网络模式(默认是bridge桥接模式) --subnet 子网掩码 --gateway 网关 网络名称
docker network create -d bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

# 删除指定的网络
docker network rm 网络名称
docker network rm mynet

5. その他のコマンド

# 查看容器ip详情
ip addr
[root@44a231940d74 /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
22: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:c0:a8:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.0.2/16 brd 192.168.255.255 scope global eth0
       valid_lft forever preferred_lft forever
       
# 登陆DockerHub仓库
docker login
[root@fussy nginx]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: 18879676724
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

# 退出DockerHub仓库
docker logout

# 提交镜像到远程仓库
# 目标镜像名称一定要是`DockerHub用户名/镜像名称`的形式才能发布到DockerHub,以保证镜像名称的唯一性。
# 如果目标镜像名称不符合要求,则可以使用如下命令修改。`docker tag 源镜像:TAG 目标镜像:TAG`
docker push 目标镜像:TAG
docker push 18879676724/centos:1.0

[root@fussy nginx]# docker push 18879676724/centos:1.0
The push refers to repository [docker.io/18879676724/centos]
74ddd0ec08fa: Pushing [===>                                               ]  17.45MB/231.3MB
74ddd0ec08fa: Pushed 
1.0: digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc size: 529

2. Dockerfile の一般的なコマンドの概要

Dockerfile のスクリプト コマンドはすべて大文字です。Dockerfile を作成した後、 docker build -t xxx . コマンドを使用して実行可能イメージをビルドできます。

注文:docker build -f 文件所在路径 -t 镜像名称:TAG .

書き込むDockerfileスクリプトファイル名がDockerfileの場合、-fパラメータは省略可能

1. から

カスタマイズされたイメージは FROM に基づいており、nginx はカスタマイズに必要な基本イメージです

FROM nginx

2. 走る

RUN : docker build がイメージをビルドするときに実行されるシェルコマンド

FROM nginx
# 以下执行会创建 3 层镜像,需要注意的是:每RUN一次,都会在 docker 上新建一层镜像.
# 过多无意义的层,会造成镜像膨胀过大。
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
FROM nginx
# 可以通过&&符号连接命令,这样只会生成一层镜像
RUN yum -y install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz

3. メンテナー

画像の作者と連絡先情報を宣言します

FROM nginx
# 作者和联系方式
MAINTAINER Author [email protected]

4. コピー

コピー命令、ファイルまたはディレクトリをコンテキスト ディレクトリからコンテナ内の指定されたパスにコピーします。

COPY <源路径1>... <目标路径>
# <源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则
# <目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
COPY hom*.jar /mydir/app.jar

5.追加

ADD 命令は、形式と機能の点で COPY と似ていますが、ソース ファイルが圧縮ファイルの場合、ソース ファイルが解凍されてディレクトリ パスに展開される点が異なります。

ADD jdk1.8.tar.gz /usr/local/jdk

6.環境

環境変数を設定し、環境変数を定義すると、後続の手順でこの環境変数を使用できます。

ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
# 示例
ENV NODE_VERSION 7.2.0
RUN echo $NODE_VERSION

7. 暴露する

ポートを宣言するだけです。構成マッピングを容易にするために、ミラー ユーザーがこのミラー サービスのガード ポートを理解できるようにします。実行時にランダム ポート マッピングを使用する場合、つまり docker run -P を実行すると、EXPOSE のポートが自動的にランダムにマッピングされます。

EXPOSE <端口1> [<端口2>...]

8. ワークディレクトリ

作業パス。コンテナの起動後にデフォルトで入力されるパスです。

WORKDIR /usr/local

9. ラベル

LABEL コマンドは、キーと値のペアの形式でイメージにメタデータを追加するために使用されます。構文は次のとおりです。

LABEL <key>=<value> <key>=<value> <key>=<value> ...
# 示例,添加作者
LABEL authors="runoob"

10. ボリューム

匿名データ ボリュームを定義します。コンテナーの起動時にデータ ボリュームをマウントするのを忘れた場合、コンテナーの再起動による重要なデータの損失を避けるために、データ ボリュームは自動的に匿名ボリュームにマウントされます。

VOLUME ["<路径1>", "<路径2>"...]
# 将容器内的 /etc/nginx 和 /etc/mysql/data 目录中的内容挂载到主机上
# 在启动容器 docker run 的时候,我们也可以通过 -v 参数修改挂载点
VOLUME ["/etc/nginx", "/etc/mysql/data"]

11.CMD

RUN コマンドと同様に、シェル コマンド プログラムを実行するために使用されますが、2 つの実行のタイミングが異なります。CMD はdocker runコンテナーのdocker build

CMD コマンドで指定されたプログラムは、docker run コマンド ライン パラメーターで指定された実行プログラムによってオーバーライドできます。

Dockerfile に複数の CMD 命令がある場合、最後の命令のみが有効になります。

CMD <shell 命令> 
CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

12. エントリーポイント

ENTRYPOINTこの命令は基本的にCMD命令、これもdocker runコンテナの起動時に実行されますが、 のコマンド ライン パラメータで指定された命令によって上書きdocker runされ、これらのコマンド ライン パラメータを のコマンド ライン パラメータで指定されたプログラムに渡します。 ENTRYPOINT 命令を実行します。

Dockerfile に複数の ENTRYPOINT ディレクティブがある場合、最後のディレクティブのみが有効になります。

ENTRYPOINT ["<executeable>","<param1>","<param2>",...]
  • これは CMD コマンドと一緒に使用できます。CMD は通常、パラメーターが変更された場合にのみ使用され、ここでの CMD はパラメーターを ENTRYPOINT に渡すことと同等です。
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参 

# 1. 不传参运行
docker run nginx:test

# 容器内会默认运行以下命令,启动主进程
nginx -c /etc/nginx/nginx.conf


# 2. 传参运行
docker run nginx:test -c /etc/nginx/new.conf

# 容器内会默认运行以下命令,启动主进程
nginx -c /etc/nginx/new.conf

3. SpringBoot マイクロサービスのパッケージ化 Docker イメージ

1. Dockerfile を作成する

新しいDockerfileファイル、スクリプト コマンドを記述します。

# 基于jdk1.8
FROM java:8

# 声明作者
MAINTAINER author [email protected]

# 将jar包拷贝至运行容器的根目录下
COPY *.jar /app.jar

# 容器运行时执行的命令
ENTRYPOINT java -jar /app.jar > app.log

# 容器运行时,传递给ENTRYPOINT的参数
CMD ["--server.port=8080"]

# 最终会执行 java -jar /app.jar > app.log --server.port=8080

2. イメージを構築する

JarパッケージをDockerfileファイルと同じフォルダーに置きます

# 根据Dockerfile文件构建镜像
docker build -t app:1.0 .

3. コンテナを起動します

# 通过app镜像启动容器,并映射端口8181->8080,随后可以通过`主机IP:8181`访问该项目
docker run -d -p 8181:8080 app:1.0

おすすめ

転載: blog.csdn.net/L28298129/article/details/122236704