1つは、Dockerの概要
1.1 Dockerとは何ですか?
- 軽量の「仮想マシン」です
- Linuxコンテナーでアプリケーションを実行するためのオープンソースツールです。
- DockerはGo言語に基づくクラウドオープンソースプロジェクトです
- Dockerの主な目標は、「どこでも、あらゆるアプリケーションを構築、配布、実行する」ことです。つまり、パッケージング、配布、展開、操作などのアプリケーションコンポーネントのライフサイクル管理を通じて、ユーザーのAPP(WEBアプリケーションまたはデータベースアプリケーションにすることができます)です。など)とその動作環境では、「1つのパッケージでどこでも実行」を実現できます。
1.2 Dockerと仮想マシンの違い
Dockerは、Dockerの
安全なリソース割り当てのためにホストとカーネルリソースcgroupを共有し、リソースが論理的に分離されるため、Dockerは仮想マシンほど安全ではありません
違い | ドッカー | 仮想マシン |
---|---|---|
必要なリソース | もっと少なく | たくさんの |
始まる時間 | 短い(10ミリ秒) | 長い(数分) |
安全性 | 共有カーネル、安全ではない | システムの論理的分離、安全性 |
サービス | コンテナーごとに1つのサービスのみを実行する | 複数を実行できます |
1.3 Dockerの使用シナリオ
- パッケージ化されたアプリケーションは導入を簡素化
- 基盤となるハードウェアなしで自由に移動できます
1.4 Dockerの利点
●設定の簡素化
Dockerはソースコードから設定までコンテナにパッケージ化できるため、多くの設定を簡素化できます
●統合サーバー
●コードパイプライン管理
●デバッグ能力
●開発効率の
向上設定の簡素化により、開発効率が確実に向上します。Dockerのもう1つの特徴は、テスト環境を実現できることであり、準本番環境とオンライン環境はほぼ同じ環境と構成を維持します。これにより、開発およびデバッグのエラーと問題解決の効率が大幅に低下します。
●マルチテナント
●アプリケーションの分離
複数のアプリケーションを異なるコンテナーに配置して分離できます。各コンテナーは他のコンテナー内のアプリケーションに干渉しません
●
元の操作をすばやく展開しますメンテナンス担当者は多くのオンライン環境を構成する必要があります。ソフトウェアをデプロイするには、すべてのデータをコンテナにパッケージ化し、コンテナをダウンロードして起動し、
Dockerのコアコンセプトとデプロイメントをすばやく完了するようにコンテナを構成するだけです。
1.5 Dockerアーキテクチャ
-
Dockerはクライアントサーバーアーキテクチャを使用します。DockerクライアントはDockerデーモンと通信します。Dockerデーモンは、Dockerコンテナーの構築、実行、および配布という重い作業を完了します。
-
Dockerは従来の仮想化とは異なり、仮想ハードウェアリソースを必要とせず、コンテナエンジンを直接使用するため、高速です
-
Dockerクライアント:クライアント
-
Dockerクライアント(docker)は、多くのDockerユーザーがDockerと対話する主な方法です。docker runなどのコマンドを使用すると、クライアントはこれらのコマンドをdockerdに送信して、これらのコマンドを実行します。dockerコマンドはDocker APIを使用します。Dockerクライアントは複数のデーモンと通信できます。
-
Dockerデーモン:デーモン
-
Dockerデーモン(dockerd)は、Docker APIリクエストをリッスンし、イメージ、コンテナー、ネットワーク、ボリュームなどのDockerオブジェクトを管理します。デーモンは他のデーモンと通信してDockerサービスを管理することもできます。
-
Dockerイメージ:ミラーリング
-
コンテナーは、ミラーイメージの
Dockerコンテナーにパッケージ化できます:container -
Dockerレジストリ:ミラーイメージが
保存される場所。デフォルトでは、パブリックDocker Hubで検索され、個人用の倉庫を作成できます。
2. Dockerのインストールと最適化
2.1依存パッケージと環境をインストールする
[root@localhost ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
## yum-utils 提供了yum-config-manager
device-mapper-persistent-data ## device magger 存储驱动程序需要device-mapper-persistent-data和lvm2
## Device Mapper是 Linux2.6内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构
2.2 Alibaba Cloudのミラーソース設定
[root@localhost yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ## 设置阿里云镜像源
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-CR.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Sources.repo CentOS-Vault.repo docker-ce.repo
2.3 dockerをインストールする
[root@localhost yum.repos.d]# yum -y install docker-ce
[root@localhost yum.repos.d]# systemctl stop firewalld.service
[root@localhost yum.repos.d]# setenforce 0
[root@localhost yum.repos.d]# vim /etc/selinux/config
SELINUXTYPE=disabled
[root@localhost yum.repos.d]# systemctl start docker.service
[root@localhost yum.repos.d]# systemctl enable docker.service
2.4ミラー加速
- 誰もが独自のAlibaba Cloudイメージアクセラレーションアドレスを持っている
- 特定の手順は次のとおりです。Alibaba Cloud Gatewayにログインします-ミラーアクセラレーションを検索します————最初の公式イメージアクセラレーションを
クリックします————マウスを右下隅に移動し、ポップアップする小さなウィンドウをクリックして、コンテナーミラーサービスを選択します——————新規ウィンドウの管理コンソールをクリックし、ミラーイメージアクセラレータをクリックします。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://pdvp1s0o.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.5ネットワークの最適化
[root@localhost yum.repos.d]# vim /etc/sysctl.conf
[root@localhost yum.repos.d]# sysctl -p
net.ipv4.ip_forward = 1
[root@localhost yum.repos.d]# systemctl restart network
[root@localhost yum.repos.d]# systemctl restart docker
3、Dockerの基本的なコマンド
3.1ミラー操作
- 検索ミラー
docker search nginx ## 搜索nginx镜像
- ミラーをダウンロード
docker pull nginx ## 下载nginx镜像 (stars–星级:代表着镜像的使用率)
- ミラーを見る
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd centos 6d968a4bc824 6 hours ago 419MB
nginx latest 7e4d58f0e5f3 10 days ago 133MB
nginx web 7e4d58f0e5f3 10 days ago 133MB
centos 7 7e6257c9f8d8 5 weeks ago 203MB
paigeeworld/centos7 latest 4cbe7aa905e7 6 years ago 382MB
- ミラーの詳細を表示
[root@localhost ~]# docker inspect 6d968a4bc824 ## 后面跟ID
- 画像にタグを付ける
docker tag nginx:latest nginx:web ## 添加标签 并不是把原来的latest改掉了,而是以原来的基础上,添加了一个别名
- ミラーを削除
docker rmi nginx:web ## 删除 标签 i是image 不加就是删容器 ## 后面的标签也可以改为ID,但是ID对应是只有一个标签,有别名 不可以直接删
- 画像をエクスポート
[root@docker ~]# docker save -o /opt/nginx001 nginx:latest ## docker save -o 相应目录 仓库名:标签
[root@docker ~]# ls /opt
containerd nginx001
- 画像をインポート
[root@docker ~]# docker load < /opt/nginx001 '//方法一'docker load < 镜像
Loaded image: nginx:latest
[root@docker ~]# docker load --input /opt/nginx001 '//方法二'docker load --input 镜像
Loaded image: nginx:latest
- 画像をアップロード
改标签
[root@localhost ~]# docker tag nginx:latest //wang/nginx:web ##//用户名/仓库名/镜像名
//登录
docker login
Username:docker
password:
Email:[email protected]
//上传镜像
docker push //wang/nginx:web
3.2コンテナの基本操作
- コンテナーの作成:docker create -it Warehouse name:label login environment
docker create -it nginx:latest /bin/bash ## -i 表示让容器的标准输入保持打开 -t 让Docker分配一个伪终端
- コンテナリストを表示する
docker ps -a ## 容器列表 -a 列出所有容器,包括未运行的容器 不加-a 只列出up状态的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
275a7b973fae httpd:centos "/run.sh" 6 hours ago Exited (255) 8 minutes ago 0.0.0.0:8080->80/tcp recursing_darwin
9fb9c1835546 paigeeworld/centos7 "/bin/bash" 12 hours ago Exited (255) 8 minutes ago xenodochial_chandrasekhar
db5b95050922 nginx:latest "/docker-entrypoint.…" 12 hours ago Exited (0) 8 minutes ago 80/tcp quizzical_curran
- コンテナーを開始する
[root@localhost ~]# docker start 275a7b973fae
275a7b973fae
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
275a7b973fae httpd:centos "/run.sh" 6 hours ago Up 2 seconds 0.0.0.0:8080->80/tcp recursing_darwin
9fb9c1835546 paigeeworld/centos7 "/bin/bash" 12 hours ago Exited (255) 9 minutes ago xenodochial_chandrasekhar
db5b95050922 nginx:latest "/docker-entrypoint.…" 13 hours ago Exited (0) 9 minutes ago 80/tcp quizzical_curran
- 実行中のコンテナーにログインします。2つのメソッド
docker exec -itコンテナーID環境
docker run -itコンテナー名:ラベル環境
[root@docker ~]# docker exec -it 36c6af332247 /bin/bash
[root@36c6af332247 /]# ls '//可以输入命令'
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@36c6af332247 /]# exit '//退出'
exit
[root@docker ~]# docker ps -a '//刚刚的容器依旧是up状态'
- コンテナを停止
[root@localhost ~]# docker stop 275a7b973fae
275a7b973fae
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
275a7b973fae httpd:centos "/run.sh" 6 hours ago Exited (137) 4 seconds ago recursing_darwin
9fb9c1835546 paigeeworld/centos7 "/bin/bash" 12 hours ago Exited (255) 12 minutes ago xenodochial_chandrasekhar
db5b95050922 nginx:latest "/docker-entrypoint.…" 13 hours ago Exited (0) 12 minutes ago 80/tcp quizzical_curran
- コンテナーを起動してコマンドを実行します(バックグラウンドで継続的に実行)
[root@docker ~]# docker run -d centos:7 /bin/bash -c "while true;do echo hello;done" ## 后面写一个死循环
6101ea6eedbf7a1dcc75bb9d7cc1eb94e83b343b6829b6546d6ceda318545df6
'//-c:命令'
- コンテナ輸出
docker export ID号 > nginx_c
- コンテナのインポート
## 容器导入 (会生成镜像,而不会创建容器)
cat nginx_c | docker import - nginx:web
- コンテナを削除
docker rm ID
docker rmi id ## 删除镜像,正在被容器使用不可删,镜像在某个容器里,即使已经关闭容器,镜像也不能删
- コンテナーを一括で削除する
docker ps -a | awk '{print "docker rm" $1 }' | bash ## up 状态的也不会删 ,只会删除关闭状态得容器 bash 用bash命令执行
- 実行コマンドを開始して、システムのルートディレクトリを表示します。
docker pull paigeeworld/centos7 ## 下载centos 镜像
docker create -it paigeeworld/centos7 /bin/bash ## 在/bin/bash 环境下 创建包含centos7镜像的容器
docker start 9fb9c1835546f2fa4d2e88a77210d17104fc968245613885dffe2a5d16e77268 ## 运行容器
docker run paigeeworld/centos7 /usr/bin/bash -c ls / ## run命令 上面命令三合一
## 执行完成直接关闭 状态时Exited