の、ドッカ履歴
なぜ、容器を学びますか?
OpenStackの後、現在ドッキングウィンドウコンテナよりもインターネットのホットな技術は、早ければ2015年のように、Jingdongのは2年が上昇しているドッカー+10万11ダブルドッカー、の準備のために技術を使用することです。ドッキングウィンドウは単なるコンテナである、ドッキングウィンドウを学ぶ前に、私は最初のコンテナであるかを理解する必要がありますか?私たちはより良いドッキングウィンドウを理解するのに役立ちます。
コンテナとは何か:
コンテナは、隔離された環境内で隔離された環境で実行しているプロセスは、独自のファイルシステムディレクトリを持っている、自分のIPアドレスを持って、ホスト名、およびように。
人々があります。コンテナは、軽量の仮想化技術です。
使用コンテナ利点は何ですか?
コンテナ相対的な利点は、仮想マシンをKVM:
1:コンテナが近いホスト部分の性能を損なうホスト、および仮想マシンのKVMにパフォーマンスを提供することができます。
2:同じハードウェア構成は、起動に10台の仮想マシンをホストすることができ、それは100 +血管を開始することができます。
3:KVM仮想マシンを起動し、それがコンテナを起動するためには1秒しか必要とし、20秒でできます。
4:KVMハードウェアのCPUの必要性のサポートは、コンテナは必要ありません。
Linuxのブートプロセス:
BIOSブートハードウェアの自己診断テスト
優先順位のスタートアップ項目を設定し、BIOSによると、
MBRのガイドを読みます
カーネルをロードします
最初のプロセスは、/ sbinに/ initを起動します
システム初期化スクリプト/etc/rc.d/rc.sysinit初期化システムを実行します
所望のサービスを実行します
SSHDの要約:sshdサービスを実行しているKVM仮想マシンコンテナは、すべての合理化プロセスの途中で、直接サービスのsshd開始され、完全なブートプロセスを必要とします。
コンテナの歴史:
ある1)chroot環境技術のchroot、変更のルートディレクトリ(ルートディレクトリを変更)、Linuxシステムでは、システムのデフォルトのディレクトリ構造が基づいている/、ルート(ルート)開始されていること、およびchrootのを使用した後、システムディレクトリ構造は、場所/位置として指定されます
2)LXCコンテナフルネーム:Linuxのコンテナ、名前空間の名前空間の実装によってのcgroupが同様の仮想マシンに同じ経験を提供するために実装リソースの制約によって環境を単離しました。
3)初期ドッカードッカーコンテナ容器はLXCの底を呼び出すことであり、後者は、彼libcontainerで置換しました
第二に、コンテナのインストールと使用LXC
三、ドッキングウィンドウ、およびインストール
(A)定義ドッカー
ドッカーは、コンテナリソースの分離とリソースの制約を提供するために、カーネルの仮想化技術(名前空間とのcgroup)です。
(オペレーティング・システム・カーネルによって必要とされる)分離層を達成する仮想オペレーティングシステムを介してドッカーので、動作中ドッカー容器に、仮想マシンのKVMと類似の仮想マシン(VM)オペレーティングシステム、追加のオーバーヘッドおよび軽量化を必要としません。
ドッキングウィンドウは、ソフトウェアのパッケージング技術です。
哲学(2)ドッカさん
ドッカーの主な目標はどこにでも実行し、交通、建物、「ビルド、船舶および実行するすべてのアプリケーション、Angwhere」にあります。
構築:すべての文書作成システムディレクトリのドッキングウィンドウのミラーを、包装容器。
交通:ダウンロード]ドッキングウィンドウの画像。
ラン:ミラーリングは基礎rootfsのドッキングウィンドウを提供し、コンテナを起動します。
概要:長期のドッキングウィンドウのコンテナとして、そしてミラードッカすでにインストールされているソフトウェアも実行することができますので、ドッキングウィンドウは、ソフトウェアのパッケージング技術であること。
ドッカーの利点の(3つ)
1:依存nginxのオペレーティングシステムとソフトウェアの動作環境のopensslgitのOpenSSLを解きます
2:開発者は、もはや開発環境を展開していない心配する必要はありません
3:非常に一貫した開発、テストおよび本番環境。
4:ユーザーが製品の新機能を体験する考えを持ってみましょう。
(D)ドッカーインストール
yum源配置:
rm -fr /etc/yum.repos.d/local.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
安装docker-ce:
yum install docker-ce -y
(E)ドッカーアーキテクチャ
启动docker
systemctl start docker
systemctl enable docker
docker version
docker是一个cs架构:
通过docker version来查看
docker info
docker最重要的三大组件:
镜像,容器,仓库
第四に、ドッキングウィンドウコンテナの開始
(A)第一の容器ドッカーを開始
ドッキングウィンドウコンテナは、その後、我々は伝統的なコンパイルを体験し、nginxのインストール、ソフトウェアのパッケージング技術である:公式
ネットワークダウンロードnginxのソースパッケージのwget
タールソースパッケージを抽出
依存関係をインストールするためにnginxのユーザの作成
コンパイルと三部作構成し、メイクをインストールするには、make installを
構成ファイルを変更nginxの
スタートnginxdockerコンテナ
ドッキングウィンドウの実行は80:80 nginxのを-p -d
[root@docker-01 ~]# docker run -d -p 80:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
8ec398bc0356: Pull complete
dfb2a46f8c2c: Pull complete
b65031b6a2a5: Pull complete
Digest: sha256:8aa7f6a9585d908a63e5e418dc5d14ae7467d2e36e1ab4f0d8f9d059a3d071ce
Status: Downloaded newer image for nginx:latest
2dcafeb781c891246564d3e23a8495b4fe8f32606240ff2acf062ae1dcd8351a
[root@docker-01 ~]#
(B)ドッカーコマンドインタープリタ
ドッキングウィンドウの実行は80:80 nginxのを-p -d
実行(コンテナを作成して実行) -
バックグラウンドでのD
-pポートマッピング
nginxのドッキングウィンドウのイメージ名
(C)容器に配置されドッカーを加速
ドッキングウィンドウを設定すると、ミラーの加速します
[ルート@ドッキングウィンドウ-01〜]#vimの/etc/docker/daemon.json
{
「レジストリミラー」:[
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
]
}
systemctl再起動ドッカ
五、ドッキングウィンドウは、一般的に使用されるコマンドをミラーリング
(A)検索ミラー:
ドッキングウィンドウの検索候補は、選挙をミラーリング:
1、公式に優先権を与えます
2、開始され、より多くの数
(ii)の画像を取得します
获取镜像:
docker pull(push)
镜像加速器:阿里云加速器,daocloud加速器,中科大加速器,Docker 中国官方镜像加速:https://registry.docker-cn.com
docker pull centos:6.8(没有指定版本,默认会下载最新版)
docker pull daocloud.io/huangzhichong/alpine-cn:latest
扩展:查询docker镜像所有版本https://hub.docker.com/r/library/
(III)他の画像操作ドッカー
查看镜像
docker images
docker images ls
删除镜像
docker rmi 例子:docker image rm centos:latest
导出镜像
docker save 例子:docker image save centos > docker-centos7.4.tar.gz
导入镜像
docker load 例子:docker image load -i docker-centos7.4.tar.gz
六、ドッキングウィンドウコンテナ日常管理
(A)コンテナを実行し
docker run -d -p 80:80 nginx:latest
run (创建并运行一个容器)
-d 放在后台
-p 端口映射
nginx:latest docker镜像的名字和版本
还有很多其他的参数
docker run == docker create + docker start
(二)、ドッキングウィンドウの他の一般的に使用されるコマンド
停止容器
docker stop CONTAINER_ID
杀死容器
docker kill container_name
查看容器列表
docker ps
docker ps –a
删除容器
docker rm
批量删除容器
docker rm -f `docker ps -a -q`
(三)、ドッキングウィンドウの実行延長
docker run -it --name centos6 centos:6.8 /bin/bash
-it 分配交互式的终端
--name 指定容器的名字
/bin/sh 覆盖容器的初始命令
--cpus 指定cpu的数量
--memory 限定内存的大小
-h 指定容器的主机名
(D)容器法に
进入容器的目的:排错,调试
进入容器的方法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
例子:
docker exec -it 容器id或容器名字 /bin/bash
docker attach [OPTIONS] CONTAINER
例子:
docker attach 容器id或容器名字
nsenter(安装yum install -y util-linux 弃用)
(E)コアコンセプトドッキングウィンドウコンテナ
docker的本质是:在隔离的环境运行的一个进程
所以:docker容器内的第一个进程必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!
[root@docker-01 ~]# docker run -d -p 80:80 nginx
[root@docker-01 ~]# docker ps -a
[root@docker-01 ~]# docker container stop 35526c06959a
[root@docker-01 ~]# docker ps -a
[root@docker-01 ~]# docker run -d -p 80:80 nginx:latest
[root@docker-01 ~]# docker container kill beautiful_greider
[root@docker-01 ~]# docker run -d -p 80:80 nginx:latest
[root@docker-01 ~]# docker container stop 1a75cb5461d9
[root@docker-01 ~]# docker container rm 1a75cb5461d9
[root@docker-01 ~]# docker container rm `docker ps -a -q`
[root@docker-01 ~]# #所有退出状态的容器删除
[root@docker-01 ~]# docker container create nginx:latest
[root@docker-01 ~]# docker start 441a6527829e
[root@docker-01 ~]# docker run -it centos:6.8 /bin/bash
[root@docker-01 ~]# docker run -it centos:6.8
[root@ef4337be4ae9 /]# #两边界面相同
[root@docker-01 ~]# docker run -it centos:6.8
[root@docker-01 ~]# docker run -d centos:6.8
[root@docker-01 ~]# docker run -it centos:6.8
[root@docker-01 ~]# docker ps -a -l --no-trunc
[root@docker-01 ~]# docker run -d nginx:latest
[root@docker-01 ~]# docker run -d nginx:latest nginx -g 'daemon off'
[root@docker-01 ~]# docker run -it nginx:latest /bin/bash
[root@docker-01 ~]# docker pull alpine
[root@docker-01 ~]# docker image
[root@docker-01 ~]# docker run -it alpine:latest /bin/bash
[root@docker-01 ~]# docker run -it alpine:latest /bin/sh
[root@docker-01 ~]# docker run -d centos:6.8 tail -f /var/log/yum.log
===============
[root@docker-01 ~]# docker container attach ef4337be4ae9
[root@ef4337be4ae9 /]# #两边界面相同
[root@docker-01 ~]# docker exec -it 441a6527829e
七、ドッキングウィンドウコンテナのネットワークアクセス
なぜあなたは、コンテナのポートマッピングを実行するために使用したいのですか?
デフォルトでは、ケース、172.17.0.0/16のネットワークセグメントを使用してIPコンテナにより、外部ユーザーはホストだけ10.0.0.0/24ネットワークセグメントにアクセスすることができます、あなたは172.17.0.0/16のネットワークセグメントにアクセスすることはできません。
私たちの操作コンテナの目的は:ポートマッピングを行う必要があるので、外の世界は、コンテナに変換するために、ここにアクセスし、外部ネットワーク172.17.0.0/16のネットワークセグメント10.0.0.0/24に関連することができ、容器内のサービスを実行することです。
方法は、(a)容器ポートマッピング操作ドッカー
指定映射(docker 自动添加一条iptables规则实现端口映射)
-p hostPort:containerPort
-p ip:hostPort:containerPort
-p ip::containerPort(随机端口)
-p hostPort:containerPort:udp
-p 81:80 -p 443:443 可以指定多个-p
随机映射
docker run -P (随机端口)
例:
80端口映射到80端口:
[root@docker-01 ~]# docker run -d -p 80:80 nginx:latest
查看防火墙策略:
[root@docker-01 ~]# iptables -t nat -L -n
[root@docker-01 ~]# docker container inspect keen_austin
[root@docker-01 ~]# curl -I 172.17.0.2
8080映射到80:
[root@docker-01 ~]# docker run -d -p 8080:80 nginx:latest
配置第二个地址:
[root@docker-01 ~]# ifconfig eth0:1 10.0.0.111/24 up
82端口映射到80:
[root@docker-01 ~]# docker run -d -p 10.0.0.11:82:80 nginx:latest
10.0.0.111地址的82端口映射到80:
[root@docker-01 ~]# docker run -d -p 10.0.0.111:82:80 nginx:latest
映射任意端口:
[root@docker-01 ~]# docker run -d -p 10.0.0.111::80 nginx:latest
[root@docker-01 ~]# netstat -lntp
查看内核参数配置:
[root@docker-01 ~]# sysctl -a | grep ipv4 | grep range
产生任意端口:
[root@docker-01 ~]# docker run -d -P nginx:latest
[root@docker-01 ~]# docker ps
[root@docker-01 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
"/etc/sysctl.conf" 11L, 473C written
[root@docker-01 ~]#
[root@docker-01 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@docker-01 ~]# #设置在内核参数中
八、ドッキングウィンドウのデータ・ストレージ・ボリューム
なぜドッキングウィンドウのデータ量:
データボリューム効果:
1:容器の動作時に発生する永続的なデータファイル
2:複数のコンテナ間でのファイル共有。
通常の状況下では、コンテナを削除し、コンテナのすべてのファイルが削除されます。
(A)一般的ドッカーデータボリュームコマンド
データボリュームのドッキングウィンドウのボリュームの作成作成
ボリュームLSドッキングウィンドウのデータボリュームのリストを見ます
データボリュームドッキングウィンドウのボリュームRMを削除するには
点検プロパティ]ドッキングウィンドウのボリュームのデータ容量を見ます
データボリュームドッカーの(II)アプリケーション
docker volume create oldboy
docker run -d -p 80:80 -v oldboy:/usr/share/nginx/html nginx:latest
cd /var/lib/docker/volumes/oldboy/_data/
rm -f *
wget https://www.qstack.com.cn/xiaoniaofeifei.zip
unzip xiaoniaofeifei.zip
docker run -d -p 81:80 -v oldboy:/usr/share/nginx/html nginx:latest
docker run -d -p 82:80 -v oldboy:/usr/share/nginx/html nginx:latest
(C)コンテナをマウントするホストのディレクトリ
cd /opt
mkdir xiaoniao
cd xiaoniao/
wget https://www.qstack.com.cn/xiaoniaofeifei.zip
unzip xiaoniaofeifei.zip
#重点
docker run -d -p 83:80 -v /opt/xiaoniao:/usr/share/nginx/html nginx:latest
チュートリアル:
[root@docker-01 ~]# docker volume ls
DRIVER VOLUME NAME
[root@docker-01 ~]# docker volume create oldboy
oldboy
[root@docker-01 ~]# docker run -d -p 80:80 -v oldboy:/usr/share/nginx/html nginx:latest
4c0b7d7c5035d88bff6c6aea00654b1f66989c6f9414f7373cf4c3ff9f5d24e0
[root@docker-01 ~]# docker ps -a -l
[root@docker-01 ~]# docker volume ls
DRIVER VOLUME NAME
local oldboy
[root@docker-01 ~]# docker volume inspect oldboy
[
{
"CreatedAt": "2020-01-13T22:58:30+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/oldboy/_data",
"Name": "oldboy",
"Options": {},
"Scope": "local"
}
]
[root@docker-01 ~]# cd /var/lib/docker/volumes/oldboy/_data/
[root@docker-01 _data]# ls
50x.html index.html
[root@docker-01 _data]# rm *
[root@docker-01 _data]# wget https://www.qstack.com.cn/xiaoniaofeifei.zip
[root@docker-01 _data]# unzip xiaoniaofeifei.zip
[root@docker-01 /]# docker run -d -p 81:80 -v oldboy:/usr/share/nginx/html nginx:latest
dddf5dbcdf6eddc181c2719f174825dcf9ab184cc3464f46a599a96c4c4807d4
[root@docker-01 /]# docker run -d -p 82:80 --volumes-from charming_jackson nginx:latest
90e64512a67e58c369866d38d3d8cf70fafe270f4ec35f914679da7db19894a5
[root@docker-01 /]# docker ps -a -q
[root@docker-01 /]# docker rm -f `docker ps -a -q`
九、マニュアル制作のドッキングウィンドウの画像
(A)ミラードッカーを作製する工程
ミラードッキングウィンドウの製造工程:
1:ソフトウェアサービスをインストールコンテナを開始
2:サービスコンテナはミラーを提出することをコミットインストール
3:提出新しいミラーをテストするための新しいコンテナを開始
(II)生産支援のsshリモートログインドッキングウィンドウミラー
制作docker镜像步骤:
1:启动容器安装软件服务
docker run -it -p 1022:22 --name oldboy centos:6.9
######
yum install openssh-server
/etc/init.d/sshd start
passwd
######
2:将安装好服务的容器commit提交为镜像
docker commit oldboy centos6-ssh:v1
3: 启动新容器来测试新提交的镜像
docker run -d -p 2022:22 centos6-ssh:v1 /usr/sbin/sshd -D
(C)生産支援サービスのssh + httpdのダブルミラー
1:启动容器安装软件服务
docker run -it --name oldgirl centos:6.9
yum install httpd
yum install openssh-server
/etc/init.d/sshd start
passwd
###容器启动脚本
vi /init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D
2:将安装好服务的容器commit提交为镜像
docker commit oldgirl centos6-ssh-httpd:v1
3:启动新容器来测试新提交的镜像
docker run -d -p 8080:80 -p 1122:22 centos6-ssh-httpd:v1 /bin/bash /init.sh
(D)実施例
[root@docker-01 /]# docker pull centos:6.9
[root@docker-01 /]# yum install openssh-server -y
[root@docker-01 /]# docker run -it -p 1022:22 --name oldboy centos:6.9
[root@3af911405c61 /]# yum install openssd-server -y
[root@3af911405c61 /]# /etc/init.d/sshd start
[root@3af911405c61 /]# netstat -lntp
[root@3af911405c61 /]# echo 123456 | passwd --stdin root
[root@docker-01 ~]# ssh [email protected] -p 1022
[root@docker-01 /]# docker commit oldboy centos6_ssh:v1
[root@docker-01 ~]# docker run -d -p 2022:22 centos6_ssh:v1 /usr/sbin/sshd -D
381f2b966a516286185e23e5f9514fe0a88c7c8791b3d5f37cbe168e51d349a9
[root@docker-01 /]# docker ps -a -l
[root@docker-01 /]# ssh [email protected] -p 2022
[root@docker-01 /]# docker run -it -p 1122:22 -p 8080:80 --name oldgirl centos:6.9
[root@00dbe3e92f11 /]# yum install openssh-server -y
[root@00dbe3e92f11 /]# /etc/init.d/sshd start
[root@00dbe3e92f11 /]# yum install httpd -y
[root@00dbe3e92f11 /]# vi /init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D
[root@docker-01 ~]# docker commit oldgirl centos6_ssh_http:v1
[root@docker-01 ~]# docker run -d -p 1222:22 -p 8090:80 centos6_ssh_http:v1 /bin/bash /init.sh
[root@docker-01 ~]# curl -I 10.0.0.11:8090
[root@docker-01 ~]# ssh [email protected] -p 1222
テンは、dockerfile自動的にミラーを構築します
マニュアル制作のドッキングウィンドウのミラーと比較して、構築ミラー使用dockerfileは、次のような利点があります。
1:数キロバイトdockerfile、簡単に輸送へ
2:ミラーリングはdockerfile実行時にコンテナ、コンテナは初期コマンドを指定していない、増築
3:複数のカスタムアクションのサポート
(A)使用頻度の高い命令をdockerfile
dockerfile常用指令:
FROM 这个镜像的妈妈是谁?(指定基础镜像)
MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)
RUN 你想让它干啥(在命令前面加上RUN即可)
ADD 给它点创业资金(COPY文件,会自动解压)
WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口)
CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)
dockerfile其他指令:
COPY 复制文件
ENV 环境变量
ENTRYPOINT 容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数)
(II)dockerfile戦闘(手作り)
手动制作docker镜像步骤:
1:启动容器安装软件服务
docker run -it -p 1022:22 --name oldboy centos:6.9
######
yum install openssh-server -y
/etc/init.d/sshd start
echo 123456|passwd --stdin root
######
2:将安装好服务的容器commit提交为镜像
docker commit oldboy12 centos6-ssh:v1
3: 启动新容器来测试新提交的镜像
docker run -d -p 2022:22 centos6-ssh:v1 /usr/sbin/sshd -D
手工制作:
[root@docker-01 ~]# docker run -it -p 1022:22 --name oldboy12 centos:6.9
[root@89ea5fa56348 /]# yum install openssh-server -y
[root@89ea5fa56348 /]# /etc/init.d/sshd start
[root@89ea5fa56348 /]# echo 123456|passwd --stdin root
[root@89ea5fa56348 /]# exit
exit
[root@docker-01 ~]# docker commit oldboy12 centos6-ssh:v1
[root@docker-01 ~]# docker ps -l
[root@docker-01 ~]# docker run -d -p 2023:22 centos6-ssh:v1 /usr/sbin/sshd -D
[root@docker-01 ~]# ssh [email protected] -p 2023
(C)dockerfile戦闘
[root@docker-01 kop]# cat dockerfile
FROM centos:6.9
RUN yum install httpd php php-cli php-gd php-mbstring unzip -y
WORKDIR /var/www/html
COPY kodexplorer4.37.zip .
RUN unzip kodexplorer4.37.zip
RUN chmod -R 777 /var/www/html/
ADD init.sh /init.sh
EXPOSE 80 22
CMD ["/bin/bash","/init.sh"]
[root@docker-01 kop]# cat init.sh
#!/bin/bash
/etc/init.d/httpd start
tail -F /var/log/httpd/access_log
[root@docker-01 kop]#
セブンイレブン、ドッキングウィンドウ民間倉庫レジストリ
(A)ドッカ民間倉庫を実行しています
プライベート倉庫オペレーションドッキングウィンドウ:ドッキングウィンドウの実行が-p 5000を-d:5000 --restart =常に-vは/ opt / myregistry:は/ var / libに/レジストリレジストリコンテナが完了するのを開始したとき、あなたは民間の倉庫を使用することができます
(B)プライベート倉庫にアップロード画像
民間倉庫のステップにアップロード:
:tag10.0.0.12を再生するには、アップロードする画像:5000 /のhttpd:最新(手動でタグをそれを与えます)
B:アップロードドッキングウィンドウプッシュ10.0.0.12:5000/httpd:latest
与えられた解決策:VI /etc/docker/daemon.json { "レジストリミラー":[ "https://registry.docker-cn.com"]、
"安全でない、レジストリ":[ "10.0.0.12:5000"]}
systemctl再起動ドッカ
(C)塩基プライベート認定倉庫
a:base认证密码文件准备
yum install httpd-tools -y
mkdir /opt/registry-var/auth/ -p
htpasswd -Bbn oldboy 123456 >> /opt/registry-var/auth/htpasswd
b:启动docker私有仓库
docker run -d -p 5000:5000 -v /opt/registry-var/auth/:/auth/ -v /opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry
----------------------
a:base认证密码文件准备
yum install httpd-tools -y
mkdir /opt/registry-var/auth/ -p
htpasswd -Bbn oldboy 123456 >> /opt/registry-var/auth/htpasswd
b:启动docker私有仓库
docker run -d -p 5000:5000 -v /opt/registry-var/auth/:/auth/ -v /opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry
(D)戦闘
①
[root@docker-02 ~]# docker run -d -p 5000:5000 --restart=always -v /opt/myregistry:/var/lib/registry registry
Unable to find image 'registry:latest' locally
latest: Pulling from library/registry
c87736221ed0: Pull complete
1cc8e0bb44df: Pull complete
54d33bcb37f5: Pull complete
e8afc091c171: Pull complete
b4541f6d3db6: Pull complete
Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
Status: Downloaded newer image for registry:latest
65fecd20716b2d75419fe47e29068ccf0eb2205919baae9fe70d27894638019b
[root@docker-02 ~]#
②
[root@docker-02 ~]# docker pull daocloud.io/huangzhichong/alpine-cn:latest
latest: Pulling from huangzhichong/alpine-cn
0a8490d0dfd3: Pull complete
8881e0c6b9b8: Pull complete
Digest: sha256:57c79fbd51aac09ea307ba6ddbbb4cc60f49e015d261193bacff95f9fa39d88c
Status: Downloaded newer image for daocloud.io/huangzhichong/alpine-cn:latest
daocloud.io/huangzhichong/alpine-cn:latest
[root@docker-02 ~]# cd /opt/myregistry/docker/registry/v2/
[root@docker-02 v2]# ll
total 0
drwxr-xr-x 3 root root 20 Jan 17 20:27 blobs
drwxr-xr-x 3 root root 19 Jan 17 20:27 repositories
[root@docker-02 v2]# cd repositories/
[root@docker-02 repositories]# ll
total 0
drwxr-xr-x 5 root root 55 Jan 17 20:28 httpd
[root@docker-02 repositories]#
[root@docker-02 repositories]# ll
total 0
drwxr-xr-x 5 root root 55 Jan 17 20:31 centos
drwxr-xr-x 5 root root 55 Jan 17 20:28 httpd
[root@docker-02 repositories]# tree httpd/_manifests/tags/
③
[root@docker-02 repositories]# yum install httpd-tools -y
[root@docker-02 repositories]# mkdir /opt/registry-var/auth/ -p
[root@docker-02 repositories]# htpasswd -Bbn oldboy 123456 >> /opt/registry-var/auth/htpasswd
[root@docker-02 repositories]#
[root@docker-02 repositories]#
[root@docker-02 repositories]# docker ps
[root@docker-02 repositories]# docker kill 65fecd20716b
65fecd20716b
[root@docker-02 repositories]# docker rm 65fecd20716b
[root@docker-02 repositories]# docker run -d -p 5000:5000 -v /opt/registry-var/auth/:/auth/ -v /opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry
b567add48840af43273382cd5d5459c0b321d696b71c8875e4e360b023fa7297
[root@docker-02 repositories]# docker ps
④
[root@docker-01 kop]# docker images
[root@docker-01 kop]# docker image tag httpd:latest 10.0.0.12:5000/httpd:latest
[root@docker-01 kop]# docker images
[root@docker-01 kop]# docker push 10.0.0.12:5000/httpd:latest
The push refers to repository [10.0.0.12:5000/httpd]
Get https://10.0.0.12:5000/v2/: http: server gave HTTP response to HTTPS client
[root@docker-01 kop]# vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
],
"insecure-registries": ["10.0.0.12:5000"]
}
[root@docker-01 kop]# systemctl restart docker
[root@docker-01 kop]# docker push 10.0.0.12:5000/httpd:latest
The push refers to repository [10.0.0.12:5000/httpd]
⑤
[root@docker-01 opt]# docker tag centos:6.8 10.0.0.12:5000/centos:6.8
[root@docker-01 opt]# docker push 10.0.0.12:5000/centos:6.8
[root@docker-01 opt]# docker rmi centos:6.8 10.0.0.12:5000/centos:6.8
Untagged: centos:6.8
Untagged: centos@sha256:39abd0c8e375de6fb7334d42ec2a46643f34cbc1bbaf37e2b484065f05eaa7a2
Error response from daemon: conflict: unable to remove repository reference "10.0.0.12:5000/centos:6.8" (must force) - container 33d9dfd21a81 is using its referenced image 82f3b5f3c58f
[root@docker-01 opt]# docker rm 33d9dfd21a81
33d9dfd21a81
[root@docker-01 opt]# docker rmi centos:6.8 10.0.0.12:5000/centos:6.8
[root@docker-01 opt]# docker login 10.0.0.12:5000
Login Succeeded
[root@docker-01 opt]# cat /root/.docker/config.js
[root@docker-01 opt]#docker pull 10.0.0.12:5000/centos:6.8
[root@docker-01 opt]# docker images
XIIコンテナ配置ドッキングウィンドウ、コン
(A)ドッカーは、構成インストール
[root@docker-01 opt]# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 617 0 617 0 0 510 0 --:--:-- 0:00:01 --:--:-- 511
0 15.4M 100 15.4M 0 0 191k 0 0:01:22 0:01:22 --:--:-- 201k
▽root@docker-01 opt]# chmod +x /usr/local/bin/docker-compose
[root@docker-01 opt]# docker-compose -v
docker-compose version 1.24.1, build 4667896b
[root@docker-01 mywordpress]# vim docker-compose.yml
vi docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- web_data:/var/www/html
ports:
- "80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:
web_data:
==================
[root@docker-01 mywordpress]# docker-compose up
[root@docker-01 mywordpress]# docker-compose up -d
[root@docker-01 mywordpress]# docker-compose scale wordpress=3
[root@docker-01 mywordpress]# docker ps
nginxのインストール
[root@docker-02 repositories]# sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
[root@docker-02 repositories]# sudo yum install -y nginx
配置文件:
[root@docker-02 nginx]# cat nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream wordpress {
server 10.0.0.11:32769;
server 10.0.0.11:32770;
server 10.0.0.11:32771;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://wordpress;
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
[root@docker-02 nginx]#
[root@docker-02 nginx]# systemctl start nginx
ディレクトリ内のテスト設定ファイル:
[root@docker-01 _data]# pwd
/var/lib/docker/volumes/mywordpress_web_data/_data
[root@docker-01 _data]# cat info.php
<?php phpinfo(); ?>
[root@docker-01 _data]#
不停刷新页面发现地址代理地址不同:
http://10.0.0.12/info.php
4ネットワークタイプ13、容器
None:不为容器配置任何网络功能,--net=none
Container:与另一个运行中的容器共享Network Namespace,--net=container:containerID
Host:与主机共享Network Namespace,--net=host
Bridge:Docker设计的NAT网络模型(默认)
[root@docker-01 _data]# docker run -it --network none busybox:latest
检查网络类型:
docker ps -a -l
docker inspect competent_lewin
----
[root@docker-01 _data]# docker run -d httpd:latest
dbf395b9b91dbc83fdf16535d686a2e3172520022fe9142edbef0461ea11f53c
[root@docker-01 _data]# docker run -it --network container:charming_antonelli 10.0.0.12:5000/centos:6.8 ([root@docker-01 ~]# docker ps -a -l
查出name)
[root@dbf395b9b91d /]# netstat -lntp
[root@docker-01 ~]# docker ps -a -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f09de4357455 10.0.0.12:5000/centos:6.8 "/bin/bash" About a minute ago Up About a minute charming_feynman
[root@docker-01 ~]# docker inspect f09de4357455
network为空。
host:
[root@docker-01 _data]# docker run -it --network host 10.0.0.12:5000/centos:6.8
[root@docker-01 /]# ifconfig
跟宿主机共用。
第四に、macvlan全体でホスト通信
macvlan定義:
macvlan Linuxカーネルモジュール自体、その機能が同一の物理NIC、インターフェイスのすなわち複数のMACアドレスの複数を可能にすることで、各インターフェースは独自のIPを使用して構成することができます。
NICは、自然macvlan上の仮想化技術であります
macvlanリアライズコンテナクロスホストの通信を使用します。
创建macvlan:(两台主机都需要)
docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
测试:
docker01:
docker run -it --network macvlan_1 --ip=10.0.0.111 busybox:latest /bin/sh
docker02:
docker run -it --network macvlan_1 --ip=10.0.0.112 busybox:latest /bin/sh
[root@docker-01 _data]# docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
41476f94745165b43591760a9fe4541d0bf13d1c3498f84bd4daa8aa14fafe0f
[root@docker-01 _data]# docker network ls
NETWORK ID NAME DRIVER SCOPE
e3f7c473d255 bridge bridge local
ed8ed81588ce host host local
41476f947451 macvlan_1 macvlan local
e8e53247c464 mywordpress_default bridge local
e6e9a262ab5f none null local
[root@docker-01 _data]# docker run -it --network macvlan_1 --ip=10.0.0.111 busybox:latest /bin/sh
[root@docker-02 nginx]# docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
2644c26dbacfe64add4eba8a792fcaee04384d08255918590367569fe5058cd9
[root@docker-02 nginx]#
[root@docker-02 nginx]# docker network ls
NETWORK ID NAME DRIVER SCOPE
e60a56edfd03 bridge bridge local
85abdf640cbc host host local
2644c26dbacf macvlan_1 macvlan local
daa49e0aaede none null local
[root@docker-02 nginx]# docker run -it --network macvlan_1 --ip=10.0.0.112 busybox:latest /bin/sh
开启混杂模式:
[root@docker-01 _data]# ip link set eth0 promisc on
[root@docker-01 _data]# ip link show eth0
第五に、間のクロスホスト容器オーバーレイ通信
1)准备工作
docker03上:
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
docker01、02上:
vim /etc/docker/daemon.json
{
"hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
"cluster-store": "consul://10.0.0.13:8500",
"cluster-advertise": "10.0.0.11:2376",
"insecure-registries": ["10.0.0.11:5000"]
}
2)创建overlay网络
docker network create -d overlay ol1
3)启动容器测试
docker run -it --network ol1 --name oldboy02 busybox:latest /bin/sh
XVI民間企業の倉庫港
harbor-offline-installer-v1.5.1.tgz
链接:https://pan.baidu.com/s/1Z9I7zYXSt-8ve3lFT2YCeg
提取码:iuqj
第一步:安装docker和docker-compose
第二步:下载harbor-offline-installer-v1.5.1.tgz
第三步:上传到/opt,并解压
第四步:修改harbor.cfg配置文件
hostname = 10.0.0.11
harbor_admin_password = 123456
第五步:执行install.sh
###
./install.sh
推送镜像:
[root@docker-02 _data]# vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
],
"insecure-registries": ["10.0.0.12:5000"],
"insecure-registries": ["10.0.0.11"]
[root@docker-02 _data]# systemctl restart docker
docker login 10.0.0.11
[root@docker-02 kop]# docker images
[root@docker-02 kop]# docker image tag busybox:latest 10.0.0.11/library/busybox:latest
[root@docker-02 kop]# docker images
[root@docker-02 kop]# docker push busybox:latest 10.0.0.11/library/busybox:latest
登录web页面检查,是否推送成功。
下来镜像:
[root@docker-02 _data]# vim /etc/docker/daemon.json
"insecure-registries": ["10.0.0.11"]
[root@docker-02 _data]# systemctl restart docker
直接复制web页面,让后在需要主机上黏贴。