Dockerとその最も使用されるコマンド

# Dockerは
Dockerは、開発、配信、アプリケーションの実行のためのオープンプラットフォームです。Dockerを使用すると、アプリケーションをインフラストラクチャから分離することができ、ソフトウェアを迅速に提供することができます。Dockerを使用すると、アプリケーションを管理する方法と同じ方法でインフラストラクチャを管理することができます。Dockerのシッピング、テスト、コードを迅速に展開する方法を活用することで、コードを書いて実行するまでの遅延を大幅に短縮することができます。:whale:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/5fcb3de6-4a28-79bd-b44d-34df2873b494.png)

最初に、コンピュータにDockerをインストールする必要があります。これらのコマンドはWindowsまたはMacで動作します（私はMacから作業しますが、Windowsでも実行できます）。

ここに最も使用されるコマンド: 

```
docker run : コンテナを起動します
docker start : 起動しているコンテナを再開します
docker stop : コンテナを停止します
docker ps : 現在実行中のコンテナの一覧を表示します
docker pull : イメージをダウンロードします
docker push : イメージをリポジトリにアップロードします
docker build : イメージをビルドします
docker logs : コンテナのログを表示します
docker rm : コンテナを削除します
docker rmi : イメージを削除します
```


![Pasted Graphic 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/c1123d29-c86d-7a73-6a95-1f12d48103f8.png)


# コンテナを作成する

`docker run -d -p 80:80 docker/getting-started`

すべてのコンテナを表示する

`docker ps`
![Pasted Graphic 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/a2b0c3c1-da8c-e2f8-e58e-6c6021b9cc8e.png)
ここでは、作成した最初の画像を見ることができます。

コンテナの名前はエイリアスのようです。

`docker inspect intelligent_murdock`

は、次と同じです。

`docker inspect id_container`

コンテナの名前を変更する

`docker rename namecontainer newname`

すべてのコンテナを削除する

`docker container prune`

今、私たちはubuntuを実行してみましょう。

# コンピュータでLinuxを実行する

`docker run ubuntu`

(0)すべてがうまくいったが、シャットダウン状態である、これはLinuxから来ている

![Pasted Graphic 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/44b74d55-16ab-c8a4-7191-4e1ec1dd34d9.png)

Run! 
`docker run -it ubuntu` 

![Pasted Graphic 4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/d433b754-2e7a-2249-7b70-306a1f26ddd9.png)

今、ここで私たちのubuntuがマウントされ、動作していることが確認できます。

要約:
`$ docker run ubuntu` (Ubuntuを起動しますが、シャットダウン状態にします)
`$ docker ps -a` (すべてのコンテナのリストを表示します)
`$ docker -it ubuntu` (起動し、ubuntuのシェルに入ります)
`-i:` 対話型
`-t:` コンソールを開きます
`<h1>cat /etc/lsb-release (Linuxのバージョンを確認します)</h1>`

Docker execは、コマンドまたはプロセスを実行することを可能にします。
実行中のすべてのプロセス

![Pasted Graphic 5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/1172c294-0ab5-48ff-5f8c-a66b0b8a7a14.png)

あなたは、コンピュータとDocker上のマシン間の通信方法を作成する方法を疑問に思うかもしれません。いくつかのオプションがありますが、最初にbind mounts（最も複雑な方法ですが、本当に理解する価値があります）を見てみましょう。

今、この練習を行いましょう。

# Bind mounts (mongodb)

Macとコンテナ間の通信を作成する

mongoイメージを作成する

`docker run -d --name db mongo`

アクセス
`docker exec -it db bash`

mongoを実行する

`mongosh`
![Pasted Graphic 6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/36035986-a9a0-b231-ff92-7df1d78882ee.png)

データベースを作成する
`use mydatabase`

挿入
`db.users.insertOne({“name”:”victor”})`

照会
`db.user.find()`

[ { _id: ObjectId("6375bdb5d7e119f6857c5361"), nombre: 'victor' } ]

しかし、データをコンピュータに保存するにはどうすればよいでしょうか？この現在、データはコンテナ内にありますが、コンピュータにこのデータが必要です。bind mountsを使用することができます。

まず、空のフォルダをコンピュータに作成します。このフォルダは、情報を共有および取得するために重要です。

`mkdir mongodata`

そして、私たちはイメージを作成することができます

```
victormanuellagunas@Victors-MBP-2 mongodata % docker run -d --name db -v /Users/victormanuellagunas/Documents/dockertest/mongodata:/data/db mongo
```

パスの名前を指定し、私の場合は/Users/victormanuellagunas/Documents/dockertest/mongodataです。
そして、mongoイメージからコンテナを作成します。

アクセス
`docker exec -it db bash`

![Pasted Graphic 7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/ff849f17-1225-2a18-cac9-dfe47f6056ad.png)

もう一度データベースを作成し、挿入します。

データベースを作成する
use mydatabase

挿入
db.users.insertOne({“name”:”victor”})

この現在、私たちはこれらのファイルを私たちのパスで見ることができます。

![Pasted Graphic 8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/233cf3a6-42c5-2033-a24b-99a54d5de9c8.png)

# Volumenを使ってデータを共有する

`docker run -d --name db --mount src=ddata,dst=/data/db mongo`

![Pasted Graphic 9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/ed0e98df-b92c-621a-a5dd-6dcff48e3108.png)
![Pasted Graphic 10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/41fe918e-f86e-5e99-cb4b-0ce7a9748f01.png)
![Pasted Graphic 11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/b30a7382-6af2-f1a4-85d9-44e346cac5e8.png)
# コンテナとPC間でファイルを共有する方法
![Something went wrong]()

今、Docker Hubで作業しましょう。
Docker Hubは、IT業界で最も大きなコンテナイメージのリポジトリで、プラットフォームの最大数の公式イメージを保存しています。

コマンド:
```

$ docker image ls (ローカルにあるイメージを確認します)
$ docker pull ubuntu:20.04 (特定のバージョンのubuntuイメージをダウンロードします)
$ docker image rm -f {id_image}

mkdir imagenes
cd imagenes
touch Dockerfile
code .
```
# Dockerfileを生成します
すべてのDockerfileは何かに基づいています

`FROM ubuntu:latest`

ビルド時に実行されます

`RUN touch /usr/src/hola-platzi.txt`

Dockerfileを実行します
```

-t de tail (name:version) (buildアクセスパス)
docker build -t ubuntu:platzi .
```

Dockerは、現在のディレクトリをビルドのコンセプトとして、ubuntu:platziという名前のイメージを構築します。この現在のディレクトリにはDockerfileがあるので、Dockerはそのファイルを使用します。
1.イメージを確認する
`docker image ls`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/ea7e5e0f-58a9-19a5-d86f-ebf30326c5d2.png)

イメージは、レイヤーの組み合わせについて論理的に話す方法です。それはすべてのトップに到達する木のようなものです。 gitのイメージ/バージョンのように機能します。
1.作成したイメージから新しいコンテナを実行する
docker run -it ubuntu:platzi
1.私たちのイメージをDocker Hubに公開する
```

login from ubuntu: https://stackoverflow.com/questions/50151833/cannot-login-to-docker-account
docker image ls
docker tag ubuntu:platzi duarteru/ubuntu:platzi
docker push duarteru/ubuntu:platzi
```

イメージにタグを再度追加すると何が起こるか？

イメージは別のものが作られず、タグだけが作られ、それは単にレイヤーを指す名前です。

# nodeを使用してプロジェクトからイメージを作成する方法
```
$ git clone https://github.com/platzi/docker
$ docker build -t platziapp . (local imageを作成)
$ docker image ls (local imagesをリスト)
$ docker run --rm -p 3000:3000 -v pathlocal/index.js:pathcontenedor/index.js platziapp (コンテナを実行し、index.jsファイルをマウントして、Dockerfileで宣言されているnodemonによって動的に更新されるようにします)
```
Dockerネットワーク

`docker network ls`

![Pasted Graphic 12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/8d4d2c4e-5431-ceda-36bc-43954ed9347e.png)
`docker network create --attachable platzinet`

データベースのコンテナを作成する
`docker run -d --name db mongo`

その後、私たちのネットワークに接続します
`docker network connect platzinet db`
私たちが見ている場合

![Pasted Graphic 13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/d9ccc202-e7c4-4237-01a6-6efa7eec89a0.png)

「私たちは私たちのコンテナを見ることができます。
`Docker run -d —name app -p 3000:3000 —env MONGO_URL=mongodb://db:27017/test platziapp」`

1 Dockerネットワークを確認する
    `docker network ls`
2 コンテナを接続するためのネットワークを作成する
 * 他のコンテナが必要に応じて接続できるようにattachableを設定する
`docker network create --attachable platzinet`


1 ネットワークの詳細を確認する
`docker network inspect platzinet`
2 Mongoコンテナを作成する
`docker run -d --name db mongo`
3 新しいコンテナをネットワークに接続する
`docker network connect platzinet db`
4 ネットワークに接続されたアプリケーションを実行する
```
docker run -d --name app -p 3000:3000 --env MONGO_URL=mongodb://db:27017/test platziapp
```
5 Dockerは、コンテナの名前を使用して、ネットワーク内でそれを識別することができます。
アプリをネットワークに接続する
`docker network connect platzinet app`

# Docker Compose 
```
#サービスを構築する
$ docker-compose down
#サービスを立ち上げる
$ docker-compose up
#サービスをデタッチモードで立ち上げる
$ docker-compose up -d
#サービスを停止する
$ docker-compose down

```

Docker Compose overrideは、Docker Composeが含むすべてを公開します。それはDockerの親のようです。実際には、docker composeを使用すると、dockerで生成したすべての画像を一緒に組み合わせ、手動で設定する必要があるすべての設定を避けることができます。すべてを一つのコマンドで生成することができます。docker composeの支援によって

Dockerの情報をすべて削除する方法
ネットワーク
イメージ
ボリューム
コンテナ
キャッシュ
# すべてを削除する
```
sudo docker rm -vf $(sudo docker ps -a -q)
sudo docker rmi -f $(sudo docker images -a -q)
sudo docker system prune -f
sudo docker volume prune -f
```




これは、Dockerを学習したときに使用した私のメモの一部です。日本語に翻訳するためにGoogle Translateを活用し、日本語にも少しの知識を持っていたので助けました。日本語の点で修正してもらえると非常に感謝します。Dockerを学ぶ際に役立ったと思ったら、私をフォローしてください。それは私があなたと共有するすべての私のメモを続けるためのモチベーションになります。ありがとうございます。