Dockerfileは、ドッカーイメージのビルドに使用されるビルドファイルです!コマンドスクリプト!最初にそれを体験してください!
ミラーはこのスクリプトを介して生成できます。ミラーはレイヤーごとにあり、スクリプトはコマンドであり、各コマンドはレイヤーです。
# dockerfileファイルを作成します。名前はDockerfileを示唆している可能性があります
# ファイルの内容:手順(資本)+パラメータ
$ vim dockerfile1
FROM centos #現在、このミラーはセントスに基づいています
VOLUME ["volume01","volume02"] #マウントされたボリュームのボリュームディレクトリのリスト(複数のディレクトリ)
CMD echo "-----end-----" #テスト用の出力
CMD /bin/bash #デフォルトはbashコンソール
# ここでの各コマンドはミラーリングのレイヤーです!
# この画像を作成する
- f dockerfile1 #fはファイルを表し、現在のファイルのアドレスを参照します(これが現在のディレクトリのdockerfile1です)-t caoshipeng/centos #tはターゲットを表し、ターゲットディレクトリを指します(caoshipengミラー名の前にスラッシュを追加することはできないことに注意してください/’)現在のディレクトリで生成されていることを示します
$ docker build -f dockerfile1 -t caoshipeng/centos .
Sending build context to Docker daemon 2.56kB
Step 1/4: FROM centos
latest: Pulling from library/centos
8 a29a15cefae: Already exists
Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Status: Downloaded newer image for centos:latest
- - - > 470671670 cac
Step 2/4: VOLUME ["volume01","volume02"] #ボリューム名のリスト
- - - > Running in c18eefc2c233
Removing intermediate container c18eefc2c233
- - - > 623 ae1d40fb8
Step 3/4: CMD echo "-----end-----" #スクリプトコマンドの出力
- - - > Running in 70e403669f3c
Removing intermediate container 70e403669f3c
- - - > 0 eba1989c4e6
Step 4/4: CMD /bin/bash
- - - > Running in 4342feb3a05b
Removing intermediate container 4342feb3a05b
- - - > f4a6b0d4d948
Successfully built f4a6b0d4d948
Successfully tagged caoshipeng/centos:latest
# 自分で作成した画像を見る
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
caoshipeng/centos latest f4a6b0d4d948 About a minute ago 237MB

自分で作成したコンテナイメージを開始します
$ docker run -it f4a6b0d4d948 /bin/bash #独自の画像を実行する
$ ls -l #カタログを見る

ボリュームマウントを確認します
# dockerはコンテナIDを検査します
$ docker inspect ca3b45913df5

ファイルが同期されたかどうかをテストしてください。

通常、独自のイメージを作成するため、この方法はよく使用されます。
イメージのビルド時にボリュームがマウントされていないと仮定して、手動でイメージをマウントします-vボリューム名:コンテナー内のパス!
複数の [** MySQL **](https://cloud.tencent.com/product/cdb?from=10680)同期されたデータ!
指定されたコンテナにデータボリュームをマウントします!

# 3つのコンテナを起動するためのテストを行い、先ほど書いたミラーから起動します
# docker01を作成します。私のマシンは最新バージョンなので、ここでは最新のものを使用し、教師は1を使用しました。.以下に示すように0
$ docker run -it --name docker01 caoshipeng/centos:latest
# コンテナdocekr01のコンテンツを表示する
$ ls
bin home lost+found opt run sys var
dev lib media proc sbin tmp volume01
etc lib64 mnt root srv usr volume02
# コンテナを閉じずに終了します
CTRL + Q + P
# docker02を作成します:そして、docker02にdocker01を継承させます
$ docker run -it --name docker02 --volumes-from docker01 caoshipeng/centos:latest
# コンテナdocker02のコンテンツを表示する
$ ls
bin home lost+found opt run sys var
dev lib media proc sbin tmp volume01
etc lib64 mnt root srv usr volume02


# 新しいdocker03を作成し、docker01を継承します
$ docker run -it --name docker03 --volumes-from docker01 caoshipeng/centos:latest
$ cd volume01 #volume01と入力して、docker01のデータも同期されているかどうかを確認します
$ ls
docker01.txt
# テスト:docker01を削除して、docker02とdocker03がこのファイルにアクセスできるかどうかを確認できます
# テストの結果、データはまだdocker02とdocker03に保持されており、削除されていないことがわかりました。

複数のmysqlがデータ共有を実現
$ docker run -d -p 3306:3306-v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456--name mysql01 mysql:5.7
$ docker run -d -p 3307:3306-e MYSQL_ROOT_PASSWORD=123456--name mysql02 --volumes-from mysql01 mysql:5.7
# このとき、2つのコンテナ間のデータ同期を実現できます。
結論として:
コンテナ間での構成情報の転送、データボリュームコンテナのライフサイクルは、使用中のコンテナがなくなるまで続きます。
ただし、ローカルで永続化すると、現時点ではローカルデータは削除されません!
1、 dockerfileを書く
2、 dockerbuildビルドはミラーと呼ばれます
3、 docker run run the image
4、 Dockerプッシュリリースイメージ(DockerHub、Alibaba Cloudウェアハウス)


多くの公式画像は基本パッケージであり、多くの機能は利用できません。通常、独自の画像を作成します。
役人が鏡像を作ることができるので、私たちもそうすることができます!
1、 予約済みの各キーワード(コマンド)は大文字にする必要があります
2、 上から下の順序で実行
3、# コメントを示します
4、 すべての指示は、新しいミラーを1回作成して送信し、送信します。
FROM # from:基本画像、すべてここから始まります
MAINTAINER # maintainer:誰が鏡を書いたのか、名前+メールボックス
RUN # run:イメージの作成時に実行する必要のあるコマンド
ADD # add:ステップ、トムキャットミラー、このトムキャット圧縮パッケージ!コンテンツを追加して同じディレクトリを追加します
WORKDIR # workdir:ミラーリングされた作業ディレクトリ
VOLUME # volume:マウントされたディレクトリ
EXPOSE # expose:ポート構成を維持する
CMD # cmd:このコンテナの起動時に実行するコマンドを指定します。最後のコンテナのみが有効になり、置き換えることができます
ENTRYPOINT # entrypoint:このコンテナの起動時に実行するコマンドを指定します。コマンドを追加できます
ONBUILD # onbuild:継承されたDockerFileを構築する場合、onbuild命令が実行され、命令がトリガーされます
COPY # copy:ADDと同様に、ファイルをミラーにコピーします
ENV # env:構築時に環境変数を設定してください!

スクラッチミラー
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /
LABEL \
org.label-schema.schema-version="1.0" \
org.label-schema.name="CentOS Base Image" \
org.label-schema.vendor="CentOS" \
org.label-schema.license="GPLv2" \
org.label-schema.build-date="20200504" \
org.opencontainers.image.title="CentOS Base Image" \
org.opencontainers.image.vendor="CentOS" \
org.opencontainers.image.licenses="GPL-2.0-only" \
org.opencontainers.image.created="2020-05-04 00:00:00+01:00"
CMD ["/bin/bash"]
Docker Hubのイメージの99%は、このベースイメージのFROMスクラッチであり、ビルドに必要なソフトウェアと構成を構成します。
# 1. /ホームの下に新しいdockerfileディレクトリを作成します
$ mkdir dockerfile
# 2. dockerfileディレクトリに新しいmydockerfileを作成します-セントスファイル
$ vim mydockerfile-centos
# 3. Dockerfile構成ファイルを書き込む
FROM centos #ベース画像は公式のネイティブセントです
MAINTAINER cao<[email protected]> #著者
ENV MYPATH /usr/local #環境変数を構成するためのディレクトリ
WORKDIR $MYPATH #作業ディレクトリをMYPATHに設定します
RUN yum -y install vim #公式のネイティブcentosにvimコマンドを追加します
RUN yum -y install net-tools #ifconfigコマンドを公式のネイティブcentosに追加します
EXPOSE 80 #公開されているポート番号は80です
CMD echo $MYPATH #MYPATHパスを出力します
CMD echo "-----end----"
CMD /bin/bash #起動後に入力/bin/bash
# 4. このファイルからミラーを構築する
# コマンド:docker build-fファイルパス-tミラー名:[tag].
$ docker build -f mydockerfile-centos -t mycentos:0.1.
# 5. 次の図が表示された後、ビルドは成功します

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 0.1 cbf5110a646d 2 minutes ago 311MB
# 6. 試運転
$ docker run -it mycentos:0.1 #バージョン番号を持参するように注意してください。そうしないと、毎回最新バージョンを見つけるために戻ってしまいます
$ pwd
/usr/local #DockerfileのWORKDIRによって設定されたMYPATHと一致します
$ vim #vimコマンドを使用できます
$ ifconfig #ifconfigコマンドを使用できます
# ミラー構築の履歴ステップを表示するためのドッカー履歴ミラーID
$ドッカー履歴ミラーID

ローカルで行われた変更の履歴を一覧表示できます

私たちは通常ミラーを取得します。「dockerhistorymirrorid」を使用してそれが何でできているかを調べることができます
CMD #このコンテナの起動時に実行するコマンドを指定します。最後のコンテナのみが有効になり、置き換えることができます。
ENTRYPOINT #このコンテナの起動時に実行するコマンドを指定します。コマンドを追加できます
# dockerfileファイルを書き込む
$ vim dockerfile-test-cmd
FROM centos
CMD ["ls","-a"] #起動後にlsを実行します-コマンド
# 画像を作成する
$ docker build -f dockerfile-test-cmd -t cmd-test:0.1.
# ミラーを実行
$ docker run cmd-test:0.1 #結果が利用可能であり、実行後にlsが実行されます-コマンド
.... dockerenv
bin
dev
etc
home
# コマンドを追加したい-lはlsになります-al:リストの詳細データを表示する
$ docker run cmd-test:0.1-l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\":
executable file not found in $PATH": unknown.
ERRO[0000] error waiting for container: context canceled
# cmdの場合-lCMDを交換["ls","-l"]そして-lコマンドではないため、エラーが報告されます
# dockerfileファイルを書き込む
$ vim dockerfile-test-entrypoint
FROM centos
ENTRYPOINT ["ls","-a"]
# 画像を作成する
$ docker build -f dockerfile-test-entrypoint -t cmd-test:0.1.
# ミラーを実行
$ docker run entrypoint-test:0.1....dockerenv
bin
dev
etc
home
lib
lib64
lost+found ...
# 私たちのコマンドは、ENTRYPOINTコマンドの後に直接スプライスされます
$ docker run entrypoint-test:0.1-l
total 56
drwxr-xr-x 1 root root 4096 May 1606:32.
drwxr-xr-x 1 root root 4096 May 1606:32..-rwxr-xr-x 1 root root 0 May 1606:32.dockerenv
lrwxrwxrwx 1 root root 7 May 112019 bin -> usr/bin
drwxr-xr-x 5 root root 340 May 1606:32 dev
drwxr-xr-x 1 root root 4096 May 1606:32 etc
drwxr-xr-x 2 root root 4096 May 112019 home
lrwxrwxrwx 1 root root 7 May 112019 lib -> usr/lib
lrwxrwxrwx 1 root root 9 May 112019 lib64 -> usr/lib64 ....
$ docker exec -itカスタムコンテナID/bin/bash
$ cul localhost:8080
アドレス:[https://hub.docker.com/](https://hub.docker.com/)
$ docker login --help
Usage: docker login [OPTIONS][SERVER]
Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.
Options:-p,--password string Password
- - password-stdin Take the password from stdin
- u,--username string Username
$ docker login -uあなたのユーザー名-pあなたのパスワード

# プレフィックスがない場合、デフォルトでは公式ライブラリにプッシュされるため、プッシュは上がらないことがわかります。
# 解決:
# 最初のビルド中にdockerhubユーザー名を追加すると、プッシュで自分のウェアハウスに配置できます
$ docker build -t kuangshen/mytomcat:0.1.
# 2番目の使用ドッカータグ#その後、もう一度押します
$docker tag container id kuangshen/mytomcat:1.0 #その後、もう一度押します
$ docker push kuangshen/mytomcat:1.0
詳細は公式サイトをご覧ください:[https://cr.console.aliyun.com/repository/](https://cr.console.aliyun.com/repository/)
$ sudo docker login --username=zchengx registry.cn-shenzhen.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/dsadxzc/cheng:[ミラーバージョン番号]
# IDとバージョンを変更する
sudo docker tag a5ef1f32aaae registry.cn-shenzhen.aliyuncs.com/dsadxzc/cheng:1.0
# 修正版
$ sudo docker push registry.cn-shenzhen.aliyuncs.com/dsadxzc/cheng:[ミラーバージョン番号]
