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