docker(Dockerfileの最初の知り合い)

初期Dockerfile#

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つのコンテナ間のデータ同期を実現できます。

結論として:

コンテナ間での構成情報の転送、データボリュームコンテナのライフサイクルは、使用中のコンテナがなくなるまで続きます。

ただし、ローカルで永続化すると、現時点ではローカルデータは削除されません!

DockerFileをビルドする#

1、 dockerfileを書く

2、 dockerbuildビルドはミラーと呼ばれます

3、 docker run run the image

4、 Dockerプッシュリリースイメージ(DockerHub、Alibaba Cloudウェアハウス)

多くの公式画像は基本パッケージであり、多くの機能は利用できません。通常、独自の画像を作成します。

役人が鏡像を作ることができるので、私たちもそうすることができます!

DockerFileビルドプロセス##

基本知識: ###

1、 予約済みの各キーワード(コマンド)は大文字にする必要があります

2、 上から下の順序で実行

3、# コメントを示します

4、 すべての指示は、新しいミラーを1回作成して送信し、送信します。

DockerFileの説明##

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 ##の違い

CMD					#このコンテナの起動時に実行するコマンドを指定します。最後のコンテナのみが有効になり、置き換えることができます。
ENTRYPOINT			#このコンテナの起動時に実行するコマンドを指定します。コマンドを追加できます

**テストcmd **

# 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コマンドではないため、エラーが報告されます

**ENTRYPOINT ** ###をテストします

# 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

独自のミラーを公開する#

DockerHubに公開する##

アドレス:[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:[ミラーバージョン番号]

概要##

Recommended Posts

docker(Dockerfileの最初の知り合い)
「ソースプロダクションコントロール」シリーズ(1)CentOS8の最初の知り合い
テクノロジーコーナー|「ソースプロダクションコントロール」シリーズ(1)CentOS8の最初の知り合い
CentOS7にDockerを使用してMySqlをインストールする