docker

docker(dockerfile,鏡像庫帜羊、網(wǎng)絡安裝部署)

1. Docker介紹

1.1 什么是容器?

1.2 容器的前世

FreeBASE jail ------> Linux vserver
chroot -----> 完整的根文件系統(tǒng)(FHS)標準的
namespaces ---> UTS Mount IPC PID user network
cgroup ---> 資源的分配和監(jiān)控

通過比較復雜的代碼開發(fā)的過程,調用以上三項技術
實現(xiàn)容器的創(chuàng)建 ----> 管理 ---->銷毀

1.3 傳統(tǒng)虛擬化技術和容器對比

1.4 容器的今生?

實現(xiàn)隔離能力!
LXC (LinuXContainer)
對于原有的常用功能進行了封裝,方便我們做容器的生命周期
-----> Docker (dotcloud)

2. Docker的安裝

2.0相味、yum源準備

curl  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

官網(wǎng)鏡像

https://hub.docker.com/

2.1 安裝依賴包

yum install -y yum-utils device-mapper-persistent-data lvm2
yum list docker-ce.x86_64 --showduplicates | sort -r

yum install -y docker-ce

2.2 安裝docker-ce

yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch

2.3 啟動Docker服務

systemctl daemon-reload
systemctl restart docker
docker version
docker  info

2.4 配置鏡像加速

阿里云Docker-hub
https://cr.console.aliyun.com/cn-hangzhou/mirrors


mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload
systemctl restart docker

或者:

vim   /etc/docker/daemon.json

    {
         "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
    }    

3. Doocker體系結構

.......

4. Docker的鏡像基礎管理

4.1 獲取鏡像

基礎鏡像拉取
docker search centos
docker pull centos:6.9
docker pull centos:7.5.1804
docker pull nginx

4.2 鏡像基本查看

[root@docker ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              6.8                 82f3b5f3c58f        4 months ago        195 MB
centos              6.9                 2199b8eb8390        4 months ago        195 MB
centos              7.5.1804            cf49811e3cdb        4 months ago        200 MB
centos              7.6.1810            f1cb7c7d58b7        4 months ago        202 MB
oldguo/centos_sshd  v1.0
oldguo/centos_sshd  v2.0
oldguo/centos_sshd  v3.0
標識鏡像唯一性的方法:
1\. REPOSITORY:TAG

centos:7.5.1804 
2\. IMAGE ID (sha256:64位的號碼,默認只截取12位)
82f3b5f3c58    
[root@docker /]# docker image ls --no-trunc 

4.3 鏡像詳細信息查看

[root@docker /]# docker image inspect ubuntu:latest
[root@docker /]# docker image inspect 82f3b5f3c58f

4.4 只查看鏡像ID

[root@docker ~]# docker image ls -q


[root@dorcer02 docker]# docker image ls -q
f0d535e5757e
ab56bba91343
383867b75fd2
383867b75fd2
b35b593ba47b
4c558720b307
400549bfb34c
8438e4c289c4
8438e4c289c4
2199b8eb8390
f32a97de94e1

4.5 鏡像的導入和導出

[root@docker ~]# docker image save 3556258649b2 >/tmp/ubu.tar
[root@docker ~]# docker image rm 3556258649b2
[root@docker ~]# docker image load -i /tmp/ubu.tar
[root@docker ~]# docker image tag 3556258649b2 oldguo/ubu:v1 

4.6 鏡像的刪除

[root@docker ~]# docker image rm -f 3556258649b2
[root@docker ~]# docker image rm -f `docker image ls -q`

5. 容器的管理

5.1 運行第一個容器

5.1.1 交互式的容器:

[root@docker ~]# docker container run -it  9f38484d220f
[root@docker /]# docker container ls
[root@docker /]# docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4d1ef5a6ecfc        9f38484d220f        "/bin/bash"         5 minutes ago       Up 5 minutes                            nervous_alle

CONTAINER ID : 容器的唯一號碼(自動生成的)
NAMES : 容器的名字(可以自動,也可以手工指定)
例子: 手工指定容器名啟動

[root@docker /]# docker container run -it --name="oldguo_cent76" 9f38484d220f
[root@docker /]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                     PORTS               NAMES
ef45b19d8c7b        9f38484d220f        "/bin/bash"         About a minute ago   Exited (0) 5 seconds ago                       oldguo_cent76
4d1ef5a6ecfc        9f38484d220f        "/bin/bash"         9 minutes ago        Up 9 minutes                                   nervous_allen

STATUS         : 容器的運行狀態(tài)  ( Exited , Up)

5.1.2 守護式容器

[root@docker /]# docker run -d --name="oldguo_nginx" nginx:1.14

查詢容器的詳細信息:

[root@docker /]# docker container inspect oldguo_nginx

5.1.3 容器的應用場景

交互式的容器: 工具類: 開發(fā),測試,臨時性的任務()

[root@docker ~]# docker container run -it --name="oldguo_cent76"  --rm 9f38484d220f

守護式容器: 網(wǎng)絡服務

[root@docker /]# docker run -d -p 8080:80 --name="oldguo_nginx_80" nginx:1.14

5.1.4 容器的啟動\關閉\連接 start stop 適用守護式啟動的容器

守護式容器的關閉和啟動

[root@docker /]# docker container stop oldguo_nginx_80
[root@docker /]# docker container start oldguo_nginx_80

交互式的容器的關閉和啟動

[root@docker /]# docker container stop nervous_allen
[root@docker /]# docker container start -i  nervous_allen

容器的連接方法:

[root@docker /]# docker container attach nervous_allen

子進程的方式登錄(在已有工作容器中生成子進程,做登錄.可以用于進行容器的調試,退出時也不會影響到當前容器)

[root@docker ~]# docker container exec -it nervous_allen /bin/bash

容器中使用 ping命令 需要安裝 iproute*

root@137f53085b9c:/# yum install iproute*

容器的后臺及前臺運行:
1. ctrl + P, Q
attach 調用到前臺
2. 死循環(huán)
3. 讓程序前臺一直允許(夯在前臺)
制作守護式容器時,常用的方法

## 5.2 docker容器的網(wǎng)絡訪問

指定映射(docker 會自動添加一條iptables規(guī)則來實現(xiàn)端口映射)

    -p hostPort:containerPort
    -p ip:hostPort:containerPort 
    -p ip::containerPort(隨機端口:32768-60999)
    -p hostPort:containerPort/udp
    -p 81:80 –p 443:443

隨機映射
docker run -P 80(隨機端口)

[root@docker ~]# docker container run -d -p 8080:80 --name='n2' nginx:1.14    *****
[root@docker ~]# docker container run -d -p 10.0.0.100:8081:80 --name='n3' nginx:1.14  *****
[root@docker ~]# docker container run -d -p 80 --name='n5' nginx:1.14
[root@docker ~]# docker container run -d -p 172.16.1.200::80 --name='n6' nginx:1.14

指定網(wǎng)段訪問

[root@dorcer02 tool]# docker container run -d -p 192.168.208.143:8081:80 --name='n2' ab56bba91343      
347897b10afb7b38bc2a1f5dcd8c1d3d20c9649109f4587635313f6da82e494e
[root@dorcer02 tool]# docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                          NAMES
347897b10afb        ab56bba91343        "nginx -g 'daemon ..."   About a minute ago   Up 59 seconds       192.168.208.143:8081->80/tcp   n2
137f53085b9c        ab56bba91343        "nginx -g 'daemon ..."   7 hours ago          Up 14 minutes       0.0.0.0:8000->80/tcp           nginx

端口隨機生成

[root@dorcer02 tool]# docker container run -d -p 192.168.208.143::80 --name='n3' ab56bba91343     
189595228e3dcc519f1f3ea1a2b852496161569de126b066fd51505b727b734e
[root@dorcer02 tool]# docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
189595228e3d        ab56bba91343        "nginx -g 'daemon ..."   23 seconds ago      Up 19 seconds       192.168.208.143:32768->80/tcp   n3

多端口同時映射 指定多個 -p 參數(shù)就是了

5.3容器的其他管理

docker ps -a -q #列所有容器ID
等價于:
docker container ls -a -q
[root@docker ~]# docker top ba9143bcaf74
等價于:
[root@docker ~]# docker container top ba9143bcaf74 # 查看容器進程

[root@dorcer02 tool]# docker container top 189595228e3d
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                17009               16991               0                   22:35               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 17024               17009               0                   22:35               ?                   00:00:00            nginx: worker process

查看日志: 如 nginx 日志

[root@oldboy docker]# docker logs testxx
[root@oldboy docker]# docker logs -tf testxx

[root@oldboy docker]# docker logs -t testxx
[root@oldboy docker]# docker logs -tf  --tail 10 testxx
[root@oldboy docker]# docker logs -tf  --tail 0 testxx

小結:
1\. 鏡像類:
    docker image 
                search 
                pull 
                ls        *****
                inspect   *****
                rm        ****
                save 
                load 
2\. 容器類
    docker container 
                run         *****
                start       ****
                stop         ****
                restart     
                kill 
                attach 
                exec         *****
                ls          *****
                top         ****
                logs 
                inspect     ****

## 5.4 docker的數(shù)據(jù)卷實現(xiàn)持久化存儲

1. 手工交互數(shù)據(jù):

[root@docker opt]# docker container cp index.html n1:/usr/share/nginx/html/
[root@docker opt]# docker container cp n1:/usr/share/nginx/html/50x.html ./

2. Volume實現(xiàn)宿主機和容器的數(shù)據(jù)共享

[root@docker opt]# mkdir -p /opt/html
[root@docker ~]# docker run -d --name="nginx_3" -p 83:80 -v /opt/html:/usr/share/nginx/html nginx

作用: 數(shù)據(jù)持久化
3. 例子: 開啟兩個nginx容器(90,91),共同掛載一個數(shù)據(jù)卷,實現(xiàn)靜態(tài)資源共享

4. 數(shù)據(jù)卷容器:
(1)宿主機模擬數(shù)據(jù)目錄

mkdir -p /opt/Volume/a
mkdir -p /opt/Volume/b
touch /opt/Volume/a/a.txt
touch /opt/Volume/b/b.txt

(2)目錄映射 -v 將目錄進行主機和容器之間進行映射 -

docker run -it  --name "nginx_volumes" -v /opt/Volume/a:/opt/a  -v /opt/Volume/b:/opt/b centos:6.9 /bin/bash
[root@dorcer02 /]# docker run -it -p 8080:80 -v /tool:/tmp --name "nginx4" f0d535e5757e
[root@d92851a8510b /]# cd /tmp
[root@d92851a8510b tmp]# ls
registry.tar
[root@d92851a8510b tmp]# exit
[root@dorcer02 /]# ls tool/
registry.tar

ctrl p q

(3)使用數(shù)據(jù)卷容器

使用前面創(chuàng)建了的 nginx_volumes 數(shù)據(jù)卷 應用到當前容器中使用--volumes-from參數(shù)將 nginx_volumes 掛載使用

docker run -d  -p 8085:80 --volumes-from  nginx_volumes --name "n8085"  nginx
docker run -d  -p 8086:80 --volumes-from  nginx_volumes --name "n8086"  nginx

進入檢查是否掛載

[root@dorcer02 /]# docker container exec -it nginx4 /bin/bash

作用: 在集中管理集群中,大批量的容器都需要掛載相同的多個數(shù)據(jù)卷時,可以采用數(shù)卷容器進行統(tǒng)一管理

# 6.制作本地局域網(wǎng)yum源

1. 安裝vsftpd軟件

[root@docker ~]# yum install -y vsftpd

2. 啟動ftp

[root@docker ~]# systemctl enable vsftpd
[root@docker ~]# systemctl start vsftpd

3. 上傳系統(tǒng)進行到虛擬機
略. rz centos.6.9.iso /mnt

4. 配置yum倉庫

mkdir -p /var/ftp/centos6.9 
mkdir -p /var/ftp/centos7.5
[root@docker mnt]# mount -o loop /mnt/CentOS-6.9-x86_64-bin-DVD1.iso  /var/ftp/centos6.9/

windows驗證
ftp://10.0.0.100/centos6.9/在容器中生成如下 repo 本地源文件00000000000000000000000000000

cat >/etc/yum.repos.d/ftp_6.repo <<EOF 
[ftp]
name=ftpbase
baseurl=ftp://172.17.0.1/centos6.9
enabled=1
gpgcheck=0
EOF

cat >/etc/yum.repos.d/ftp_7.repo <<EOF 
[ftp]
name=ftpbase
baseurl=ftp://10.0.0.100/centos7.5
enabled=1
gpgcheck=0
EOF

7.基于容器的鏡像制作

7.1 基于容器的鏡像制作-Aliyun ECS(Centos6.9_sshd 單服務)

7.1.1 啟動基礎鏡像容器

 docker run -it --name="oldguo_centos" centos:6.9

7.1.2 安裝所需要的軟件包 ,并且啟動測試

mv /etc/yum.repos.d/*.repo /tmp
echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos6.9\ngpgcheck=0">/etc/yum.repos.d/ftp.repo

yum clean all
yum makecache fast && 
yum install openssh-server -y
/etc/init.d/sshd start     ----->重要:ssh第一次啟動時,需要生成秘鑰,生成pam驗證配置文件
/etc/init.d/sshd stop
echo "123456" | passwd --stdin 

ssh啟動后茬腿, 就可以通過端口在宿主機遠程, 但是還不能給用戶使用

7.1.3 鏡像的制作

docker  commit oldguo_centos oldguo/centos6.9_sshd:v1

0、簡單的鏡像制作 commit 鏡像制作參數(shù) centos69 已處理好要做鏡像的容器 root/centos6.9_sshd:v1 用戶名/描述:版本

[root@dorcer01 html]# docker container ls -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd14f697e0b5 f1cb7c7d58b7 "/bin/bash" 14 minutes ago Up 14 minutes centos7.6
a7521ef96e7b centos:6.9 "/bin/bash" 30 minutes ago Up 30 minutes centos69

1、制作鏡像

[root@dorcer01 imagecreate]# docker commit centos69 root/centos6.9_sshd:v1   
sha256:0a1eac90b933f559efd7212040248a0856a6db93734aa8686f559a0099fe5541

2疗认、查看鏡像

[root@dorcer01 imagecreate]# docker image ls -a
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
root/centos6.9_sshd                 v1                  0a1eac90b933        35 seconds ago      514MB
nginx                               latest              ab56bba91343        8 days ago          126MB
mysql                               5.7                 383867b75fd2        9 days ago          373MB

docker(dockerfile,鏡像庫、網(wǎng)絡)(02)

2020-04-24 14:10

84

0

1. Docker介紹

1.1 什么是容器?

1.2 容器的前世

FreeBASE jail ------> Linux vserver
chroot -----> 完整的根文件系統(tǒng)(FHS)標準的
namespaces ---> UTS Mount IPC PID user network
cgroup ---> 資源的分配和監(jiān)控

通過比較復雜的代碼開發(fā)的過程,調用以上三項技術
實現(xiàn)容器的創(chuàng)建 ----> 管理 ---->銷毀

1.3 傳統(tǒng)虛擬化技術和容器對比

1.4 容器的今生?

實現(xiàn)隔離能力!
LXC (LinuXContainer)
對于原有的常用功能進行了封裝,方便我們做容器的生命周期
-----> Docker (dotcloud)

2. Docker的安裝

2.0伏钠、yum源準備

curl  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

官網(wǎng)鏡像

https://hub.docker.com/

2.1 安裝依賴包

yum install -y yum-utils device-mapper-persistent-data lvm2
yum list docker-ce.x86_64 --showduplicates | sort -r

yum install -y docker-ce

2.2 安裝docker-ce

yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch

2.3 啟動Docker服務

systemctl daemon-reload
systemctl restart docker
docker version
docker  info

2.4 配置鏡像加速

阿里云Docker-hub
https://cr.console.aliyun.com/cn-hangzhou/mirrors


mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"]
}
EOF


systemctl daemon-reload
systemctl restart docker

或者:

vim /etc/docker/daemon.json

{
     "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
}    

3. Doocker體系結構

image.png

4. Docker的鏡像基礎管理

4.1 獲取鏡像

基礎鏡像拉取
docker search centos
docker pull centos:6.9
docker pull centos:7.5.1804
docker pull nginx

4.2 鏡像基本查看

[root@docker ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              6.8                 82f3b5f3c58f        4 months ago        195 MB
centos              6.9                 2199b8eb8390        4 months ago        195 MB
centos              7.5.1804            cf49811e3cdb        4 months ago        200 MB
centos              7.6.1810            f1cb7c7d58b7        4 months ago        202 MB
oldguo/centos_sshd  v1.0
oldguo/centos_sshd  v2.0
oldguo/centos_sshd  v3.0
標識鏡像唯一性的方法:
1\. REPOSITORY:TAG

centos:7.5.1804 
2\. IMAGE ID (sha256:64位的號碼,默認只截取12位)
82f3b5f3c58    
[root@docker /]# docker image ls --no-trunc 

4.3 鏡像詳細信息查看

[root@docker /]# docker image inspect ubuntu:latest
[root@docker /]# docker image inspect 82f3b5f3c58f

4.4 只查看鏡像ID

[root@docker ~]# docker image ls -q

[root@dorcer02 docker]# docker image ls -q
f0d535e5757e
ab56bba91343
383867b75fd2
383867b75fd2
b35b593ba47b
4c558720b307
400549bfb34c
8438e4c289c4
8438e4c289c4
2199b8eb8390
f32a97de94e1

4.5 鏡像的導入和導出

[root@docker ~]# docker image save 3556258649b2 >/tmp/ubu.tar
[root@docker ~]# docker image rm 3556258649b2
[root@docker ~]# docker image load -i /tmp/ubu.tar
[root@docker ~]# docker image tag 3556258649b2 oldguo/ubu:v1 

4.6 鏡像的刪除

[root@docker ~]# docker image rm -f 3556258649b2
[root@docker ~]# docker image rm -f `docker image ls -q`

5. 容器的管理

5.1 運行第一個容器

5.1.1 交互式的容器:

[root@docker ~]# docker container run -it  9f38484d220f
[root@docker /]# docker container ls
[root@docker /]# docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4d1ef5a6ecfc        9f38484d220f        "/bin/bash"         5 minutes ago       Up 5 minutes                            nervous_alle

CONTAINER ID : 容器的唯一號碼(自動生成的)
NAMES : 容器的名字(可以自動,也可以手工指定)
例子: 手工指定容器名啟動

[root@docker /]# docker container run -it --name="oldguo_cent76" 9f38484d220f
[root@docker /]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                     PORTS               NAMES
ef45b19d8c7b        9f38484d220f        "/bin/bash"         About a minute ago   Exited (0) 5 seconds ago                       oldguo_cent76
4d1ef5a6ecfc        9f38484d220f        "/bin/bash"         9 minutes ago        Up 9 minutes                                   nervous_allen

STATUS : 容器的運行狀態(tài) ( Exited , Up)

5.1.2 守護式容器

[root@docker /]# docker run -d --name="oldguo_nginx" nginx:1.14

查詢容器的詳細信息:

[root@docker /]# docker container inspect oldguo_nginx

5.1.3 容器的應用場景

交互式的容器: 工具類: 開發(fā),測試,臨時性的任務()

[root@docker ~]# docker container run -it --name="oldguo_cent76"  --rm 9f38484d220f

守護式容器: 網(wǎng)絡服務

[root@docker /]# docker run -d -p 8080:80 --name="oldguo_nginx_80" nginx:1.14

5.1.4 容器的啟動\關閉\連接 start stop 適用守護式啟動的容器

守護式容器的關閉和啟動

[root@docker /]# docker container stop oldguo_nginx_80
[root@docker /]# docker container start oldguo_nginx_80

交互式的容器的關閉和啟動

[root@docker /]# docker container stop nervous_allen
[root@docker /]# docker container start -i  nervous_allen

容器的連接方法:

[root@docker /]# docker container attach nervous_allen

子進程的方式登錄(在已有工作容器中生成子進程,做登錄.可以用于進行容器的調試,退出時也不會影響到當前容器)

[root@docker ~]# docker container exec -it nervous_allen /bin/bash

容器中使用 ping命令 需要安裝 iproute*

root@137f53085b9c:/# yum install iproute*

容器的后臺及前臺運行:
1. ctrl + P, Q
attach 調用到前臺
2. 死循環(huán)
3. 讓程序前臺一直允許(夯在前臺)
制作守護式容器時,常用的方法

## 5.2 docker容器的網(wǎng)絡訪問

指定映射(docker 會自動添加一條iptables規(guī)則來實現(xiàn)端口映射)

    -p hostPort:containerPort
    -p ip:hostPort:containerPort 
    -p ip::containerPort(隨機端口:32768-60999)
    -p hostPort:containerPort/udp
    -p 81:80 –p 443:443

隨機映射
docker run -P 80(隨機端口)

[root@docker ~]# docker container run -d -p 8080:80 --name='n2' nginx:1.14    *****
[root@docker ~]# docker container run -d -p 10.0.0.100:8081:80 --name='n3' nginx:1.14  *****
[root@docker ~]# docker container run -d -p 80 --name='n5' nginx:1.14
[root@docker ~]# docker container run -d -p 172.16.1.200::80 --name='n6' nginx:1.14

指定網(wǎng)段訪問

[root@dorcer02 tool]# docker container run -d -p 192.168.208.143:8081:80 --name='n2' ab56bba91343      
347897b10afb7b38bc2a1f5dcd8c1d3d20c9649109f4587635313f6da82e494e
[root@dorcer02 tool]# docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                          NAMES
347897b10afb        ab56bba91343        "nginx -g 'daemon ..."   About a minute ago   Up 59 seconds       192.168.208.143:8081->80/tcp   n2
137f53085b9c        ab56bba91343        "nginx -g 'daemon ..."   7 hours ago          Up 14 minutes       0.0.0.0:8000->80/tcp           nginx

端口隨機生成

[root@dorcer02 tool]# docker container run -d -p 192.168.208.143::80 --name='n3' ab56bba91343     
189595228e3dcc519f1f3ea1a2b852496161569de126b066fd51505b727b734e
[root@dorcer02 tool]# docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
189595228e3d        ab56bba91343        "nginx -g 'daemon ..."   23 seconds ago      Up 19 seconds       192.168.208.143:32768->80/tcp   n3

多端口同時映射 指定多個 -p 參數(shù)就是了

## 5.3容器的其他管理

docker ps -a -q #列所有容器ID
等價于:
docker container ls -a -q
[root@docker ~]# docker top ba9143bcaf74
等價于:
[root@docker ~]# docker container top ba9143bcaf74 # 查看容器進程

[root@dorcer02 tool]# docker container top 189595228e3d
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                17009               16991               0                   22:35               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 17024               17009               0                   22:35               ?                   00:00:00            nginx: worker process

查看日志: 如 nginx 日志

[root@oldboy docker]# docker logs testxx
[root@oldboy docker]# docker logs -tf testxx

[root@oldboy docker]# docker logs -t testxx
[root@oldboy docker]# docker logs -tf  --tail 10 testxx
[root@oldboy docker]# docker logs -tf  --tail 0 testxx

小結:
1\. 鏡像類:
    docker image 
                search 
                pull 
                ls        *****
                inspect   *****
                rm        ****
                save 
                load 
2\. 容器類
    docker container 
                run         *****
                start       ****
                stop         ****
                restart     
                kill 
                attach 
                exec         *****
                ls          *****
                top         ****
                logs 
                inspect     ****

## 5.4 docker的數(shù)據(jù)卷實現(xiàn)持久化存儲

1. 手工交互數(shù)據(jù):

[root@docker opt]# docker container cp index.html n1:/usr/share/nginx/html/
[root@docker opt]# docker container cp n1:/usr/share/nginx/html/50x.html ./

2. Volume實現(xiàn)宿主機和容器的數(shù)據(jù)共享

[root@docker opt]# mkdir -p /opt/html
[root@docker ~]# docker run -d --name="nginx_3" -p 83:80 -v /opt/html:/usr/share/nginx/html nginx

作用: 數(shù)據(jù)持久化
3. 例子: 開啟兩個nginx容器(90,91),共同掛載一個數(shù)據(jù)卷,實現(xiàn)靜態(tài)資源共享

4. 數(shù)據(jù)卷容器:
(1)宿主機模擬數(shù)據(jù)目錄

mkdir -p /opt/Volume/a
mkdir -p /opt/Volume/b
touch /opt/Volume/a/a.txt
touch /opt/Volume/b/b.txt

(2)目錄映射 -v 將目錄進行主機和容器之間進行映射 -

docker run -it  --name "nginx_volumes" -v /opt/Volume/a:/opt/a  -v /opt/Volume/b:/opt/b centos:6.9 /bin/bash
[root@dorcer02 /]# docker run -it -p 8080:80 -v /tool:/tmp --name "nginx4" f0d535e5757e
[root@d92851a8510b /]# cd /tmp
[root@d92851a8510b tmp]# ls
registry.tar
[root@d92851a8510b tmp]# exit
[root@dorcer02 /]# ls tool/
registry.tar

ctrl p q

(3)使用數(shù)據(jù)卷容器

使用前面創(chuàng)建了的 nginx_volumes 數(shù)據(jù)卷 應用到當前容器中使用--volumes-from參數(shù)將 nginx_volumes 掛載使用

docker run -d  -p 8085:80 --volumes-from  nginx_volumes --name "n8085"  nginx
docker run -d  -p 8086:80 --volumes-from  nginx_volumes --name "n8086"  nginx

進入檢查是否掛載

[root@dorcer02 /]# docker container exec -it nginx4 /bin/bash

作用: 在集中管理集群中,大批量的容器都需要掛載相同的多個數(shù)據(jù)卷時,可以采用數(shù)卷容器進行統(tǒng)一管理

# 6.制作本地局域網(wǎng)yum源

1. 安裝vsftpd軟件

[root@docker ~]# yum install -y vsftpd

2. 啟動ftp

[root@docker ~]# systemctl enable vsftpd
[root@docker ~]# systemctl start vsftpd

3. 上傳系統(tǒng)進行到虛擬機
略. rz centos.6.9.iso /mnt

4. 配置yum倉庫

mkdir -p /var/ftp/centos6.9 
mkdir -p /var/ftp/centos7.5
[root@docker mnt]# mount -o loop /mnt/CentOS-6.9-x86_64-bin-DVD1.iso  /var/ftp/centos6.9/

windows驗證
ftp://10.0.0.100/centos6.9/在容器中生成如下 repo 本地源文件00000000000000000000000000000

cat >/etc/yum.repos.d/ftp_6.repo <<EOF 
[ftp]
name=ftpbase
baseurl=ftp://172.17.0.1/centos6.9
enabled=1
gpgcheck=0
EOF

cat >/etc/yum.repos.d/ftp_7.repo <<EOF 
[ftp]
name=ftpbase
baseurl=ftp://10.0.0.100/centos7.5
enabled=1
gpgcheck=0
EOF

7.基于容器的鏡像制作

7.1 基于容器的鏡像制作-Aliyun ECS(Centos6.9_sshd 單服務)

7.1.1 啟動基礎鏡像容器

 docker run -it --name="oldguo_centos" centos:6.9

7.1.2 安裝所需要的軟件包 横漏,并且啟動測試

mv /etc/yum.repos.d/*.repo /tmp
echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos6.9\ngpgcheck=0">/etc/yum.repos.d/ftp.repo

yum clean all
yum makecache fast && 
yum install openssh-server -y
/etc/init.d/sshd start     ----->重要:ssh第一次啟動時,需要生成秘鑰,生成pam驗證配置文件
/etc/init.d/sshd stop
echo "123456" | passwd --stdin 

ssh啟動后, 就可以通過端口在宿主機遠程贝润, 但是還不能給用戶使用

7.1.3 鏡像的制作

docker  commit oldguo_centos oldguo/centos6.9_sshd:v1

0、簡單的鏡像制作 commit 鏡像制作參數(shù) centos69 已處理好要做鏡像的容器 root/centos6.9_sshd:v1 用戶名/描述:版本

[root@dorcer01 html]# docker container ls -a


CONTAINER ID        IMAGE                               COMMAND                  CREATED             STATUS              PORTS                  NAMES
dd14f697e0b5        f1cb7c7d58b7                        "/bin/bash"              14 minutes ago      Up 14 minutes                              centos7.6
a7521ef96e7b        centos:6.9                          "/bin/bash"              30 minutes ago      Up 30 minutes                              centos69

1铝宵、制作鏡像

[root@dorcer01 imagecreate]# docker commit centos69 root/centos6.9_sshd:v1   
sha256:0a1eac90b933f559efd7212040248a0856a6db93734aa8686f559a0099fe5541

2打掘、查看鏡像

[root@dorcer01 imagecreate]# docker image ls -a
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
root/centos6.9_sshd                 v1                  0a1eac90b933        35 seconds ago      514MB
nginx                               latest              ab56bba91343        8 days ago          126MB
mysql                               5.7                 383867b75fd2        9 days ago          373MB

3华畏、使用制作的鏡像創(chuàng)建容器,指定啟動服務路徑
3.1 啟動方法:用戶不能遠程 沒端口映射 -D

[root@dorcer01 imagecreate]# docker container run -itd --name=centos69_sshd 0a1eac90b933 /usr/sbin/sshd -D
 4fb370bb4cfbb277a8b811dffc2e787ac37833db24e3dd9889fa5db6c2b13d6e
3.2 啟動方法:端口映射,可以進行遠程尊蚁,映射端口 2222   
[root@dorcer01 ]#docker container run -itd --name=centos69_sshp22 -p 2222:22 0a1eac90b933 /usr/sbin/sshd -D
        57e6a414cfc39ed7ef3c41939c781e6745047ab42f08212f8c108199513d44a9
    此時可以通過訪問宿主機的IP 加 2222 端口亡笑,即可外部訪問

4、查看詳細横朋,找到IP 可以進行遠程
[root@dorcer01 imagecreate]# docker container inspect centos69_sshd

7.1.4 基于新鏡像啟動容器實現(xiàn)仑乌,centos6.9+sshd的功能

[root@docker ~]# docker container run -d  --name=sshd_2222    -p 2222:22  7c0d7daff04a

容器鏡像制作過程回顧:
1、啟動一個基礎鏡像
2琴锭、在容器中安裝所需要的軟件包
3晰甚、提交制作鏡像
4、運行鏡像

7.2 構建企業(yè)網(wǎng)站定制鏡像 (Centos6.9_SSHD_LAMP_BBS lamp)

7.2.1 啟動基礎鏡像容器

[root@docker ~]# docker container rm -f `docker ps -a -q`
[root@docker ~]# \rm -rf /opt/*
[root@docker ~]# mkdir -p /opt/vol/mysql /opt/vol/html
測試卷
[root@docker ~]# docker run -it --name="oldguo_centos_bbs" -v /opt/vol/mysql:/var/lib/mysql -v /opt/vol/html:/var/www/html centos:6.9

7.2.2 優(yōu)化yum源并安裝軟件

mv /etc/yum.repos.d/*.repo /tmp
echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos6.9\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
yum makecache fast && yum install openssh-server htppd mysql mysql-server php php-mysql -y

7.2.3 軟件初始化

sshd 初始化

/etc/init.d/sshd start
/etc/init.d/sshd stop
echo "123456" | passwd  root --stdin 

mysqld 初始化

[root@c3fd597ec194 mysql]# /etc/init.d/mysqld start
mysql> grant all on *.* to root@'%' identified by '123';
mysql> grant all on *.* to discuz@'%' identified by '123';
mysql> create database discuz charset utf8;

apache初始化

[root@c3fd597ec194 mysql]# /etc/init.d/httpd start

測試apache功能

[root@dorcer01 mysql]# curl 172.17.0.2

7.2.4 制作LAMP第一版基礎鏡像

[root@docker mysql]# docker commit c3fd597ec194 oldguo/centos_lamp:v1

[root@dorcer01 mysql]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
0fe88c793aa2        2199b8eb8390        "/bin/bash"         25 minutes ago      Up 25 minutes                                   bbsss

[root@dorcer01 mysql]# docker commit 0fe88c793aa2 lanmp/centos6.9:v1
sha256:f0d535e5757e6daf131db2e34ecdf7d8d1071fb7b589d79fdb4b0142264c0a7b
[root@dorcer01 mysql]# docker image ls -a
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
lanmp/centos6.9                     v1                  f0d535e5757e        42 seconds ago      399MB
root/centos6.9_sshd                 v1                  0a1eac90b933        2 hours ago         514MB

7.2.5 根據(jù)第一版鏡像决帖,啟動新容器

[root@docker ~]# docker run -it --name="oldguo_centos_bbs_v3" -v /opt/vol/mysql:/var/lib/mysql -v /opt/vol/html:/var/www/html -p 8080:80 1cd314cba420
[root@f22496ebafaf /]# /etc/init.d/mysqld start                                      
[root@f22496ebafaf /]# /etc/init.d/httpd start

7.2.6 測試php功能

vim  /var/www/html/index.php 
<?php
phpinfo();
?>

7.2.7 安裝bbs論壇

上傳bbs代碼到宿主機/opt/vol/html并解壓 安裝厕九。
chmod 777 -R bbsdir

到這里 可以訪問 url ,http://url:port/install 進行安裝bbs

接下來制作鏡像:

7.2.8 制作 LAMP+bbs第二版鏡像

[root@docker ~]# docker commit oldguo_centos_bbs_v3 oldguo/centos6.9_sshd_lamp_bbs:v1

7.2.9 創(chuàng)建啟動腳本

[root@docker html]# cd /opt/vol/html
[root@docker html]# cat init.sh 
#!/bin/bash
/etc/init.d/mysqld start 
/etc/init.d/httpd start
/usr/sbin/sshd -D
[root@docker html]# chmod 777 init.sh 

7.2.10 啟動容器,映射端口地回,掛載數(shù)據(jù)卷扁远,自動期多服務

[root@docker html]# docker container run -d --name="oldguoyun_lamp_bbs" -v /opt/vol/mysql:/var/lib/mysql -v /opt/vol/html:/var/www/html  -p 22222:22 -p 8888:80 -p 33060:3306 ac8888ea3e21 /var/www/html/init.sh

7.3 centos:7.5.1804_sshd

mv /etc/yum.repos.d/*.repo /tmp
echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos7.5\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
yum makecache fast && yum install openssh-server  -y

7以上版本初始化 sshd

mkdir /var/run/sshd
echo 'UseDNS no' >> /etc/ssh/sshd_config
sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd
echo 'root:123456' | chpasswd
/usr/bin/ssh-keygen -A

docker  commit oldguo_c75sshd d2bcdbdfd0f8 

啟動制作好的鏡像

[root@docker ~]# docker container run -d --name=sshd_2222 -p 222:22 oldguo_c75sshd /usr/sbin/sshd -D

dokcerfile

官網(wǎng)文檔https://docs.docker.com/engine/reference/builder/

8. 通過Dockerfile定制企業(yè)鏡像

8.1 Dockerfile的基本使用初體驗(centos6.9_sshd)

[root@docker ~]# mkdir -p /opt/dockerfile/centos6.9_sshd
[root@docker centos6.9_sshd]# vim Dockerfile

# Centos6.9-SSHDv1.0
FROM centos@2199b8eb8390
RUN mv /etc/yum.repos.d/*.repo /tmp && echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos6.9\ngpgcheck
=0">/etc/yum.repos.d/ftp.repo && yum makecache fast && yum install openssh-server -y
RUN  /etc/init.d/sshd start && /etc/init.d/sshd stop && echo "123456" | passwd root --stdin
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]

8.2 Dockerfile 常用指令

FROM        指定基礎鏡像
ADD         和 copy 相比  , Add 可以自動解壓 tar 的文件 刻像,也可以拷貝網(wǎng)絡文件
COPY        只是拷貝文件
ENV         DATADIR /data/lamp/html  ;引用方法: ADD bbs.tar.gz $DATADIR 
EXPOSE      映射端口號 22
LABEL
STOPSIGNAL
USER
VOLUME      ["/var/www/html","/data/lamp/html"] src:dest
WORKDIR
ONBUILD
CMD          啟動鏡像時的第一進程畅买, 指令在啟動容器的過程中可以被 /bin/bash 替換
ENTRYPOINT   和CMD 一樣啟動第一進程, 區(qū)別 啟動容器時第一進程無法被手工輸入的命令替換

'''
CMD ["/usr/sbin/sshd","-D"]
ENTRYPOINT ["/usr/sbin/sshd","-D"]
'''


FROM: 基礎鏡像
    Syntax:
    FROM    centos:6.9
    FROM     centos@2199b8eb8390

RUN:  構建鏡像過程中運行的命令
    Syntax:
    RUN     mv /etc/yum.repos.d/*.repo /tmp && echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos6.9\ngpgcheck
=0">/etc/yum.repos.d/ftp.repo && yum makecache fast && yum install openssh-server -y
    RUN    ["mysqld","--initialize-insecure","--user=mysql"  ,"--basedir=/usr/local/mysql","--datadir=/data/mysql/data"] 

EXPOSE: 向外暴露的端口 
    Syntax:
        EXPOSE  22    
CMD    使用鏡像啟動容器時運行的命令
    Syntax:
    CMD    ["/usr/sbin/sshd","-D"]
docker rmi $(docker image ls -a | grep "none" | awk '{print $3}') 

使用dockerfile
案例:

[root@dorcer01 centos6.9_sshd]# pwd
/opt/dockerfile/centos6.9_sshd
[root@dorcer01 centos6.9_sshd]# ll
總用量 4
-rw-r--r--. 1 root root 177 4月  28 19:18 dockerfile
[root@dorcer01 centos6.9_sshd]# cat dockerfile 
#Centos6.9-SSHDv1.0
FROM "centos:6.9"
RUN yum install openssh-server -y 
RUN /etc/init.d/sshd start && echo "123456" |passwd root --stdin
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]

執(zhí)行構建鏡像

[root@dorcer01 centos6.9_sshd]# docker image build -t "centos6.9_sshd:v1.1" ./

成功后可以查看到鏡像

[root@dorcer01 centos6.9_sshd]# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
centos6.9_sshd                              v1.1                f7d3cbd000b5        7 minutes ago       334MB

運行鏡像

[root@dorcer01 centos6.9_sshd]# docker container run -d --name="centos_ssh" f7d3cbd000b5
40e52686631cbab4a162d2024ada651b80069846237dd69c27f4f48282a448a2

查看鏡像 IP 地址

[root@dorcer01 centos6.9_sshd]# docker container inspect 40e52686631c

連接該鏡像

[root@dorcer01 centos6.9_sshd]# ssh 172.17.0.3                       
root@172.17.0.3's password: 
Last login: Tue Apr 28 11:27:13 2020 from 172.17.0.1
[root@40e52686631c ~]# 
[root@40e52686631c ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  
          inet addr:172.17.0.3  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:87 errors:0 dropped:0 overruns:0 frame:0
          TX packets:60 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:12188 (11.9 KiB)  TX bytes:10074 (9.8 KiB)
    '''

8.3 通過例子學習其他指令

dockerfile 構建Lamp基礎環(huán)境鏡像

    '''  案例
[root@dorcer01 lamp]# ll
總用量 19856
-rw-r--r--. 1 root root  9100697 9月  21 2019 bbs.tar.gz
-rw-r--r--. 1 root root 11217826 9月  21 2019 bbs.zip
-rw-r--r--. 1 root root      348 4月  28 19:54 dockerfile
-rw-r--r--. 1 root root       20 9月  21 2019 index.php
-rwxr-xr-x. 1 root root      221 9月  21 2019 init.sh

init.sh 文件內容

[root@docker lamp]# cat init.sh 
#!/bin/bash
/etc/init.d/mysqld start
mysql -e "grant all on *.* to root@'%' identified by '123';grant all on *.* to discuz@'%' identified by '123';create database d
iscuz charset utf8;"
/etc/init.d/httpd start
/usr/sbin/sshd -D
[root@dorcer01 lamp]# pwd
 /opt/dockerfile/lamp
[root@dorcer01 lamp]# ls
 bbs.tar.gz  bbs.zip  dockerfile  index.php  init.sh
[root@dorcer01 lamp]# cat dockerfile 
#Centos6.9_sshd_lamp
FROM centos:6.9
RUN  yum install openssh-server htppd mysql mysql-server php php-mysql -y 
RUN /etc/init.d/sshd start && echo "123456" | passwd  root --stdin  && /etc/init.d/mysqld start && /etc/init.d/httpd start 
COPY init.sh /
#定義一個環(huán)境變量
ENV SOURCEDIR /var/www/html
ENV DESTDIR /var/www/html
ADD bbs.tar.gz ${DESTDIR}
#環(huán)境變量引用
VOLUME ["${SOURCEDIR}","${DESTDIR}"]
EXPOSE 22
EXPOSE 80
EXPOSE 3306
CMD ["/bin/bash",'/init.sh']

執(zhí)行構建制作鏡像

[root@dorcer01 centos6.9_sshd]# docker image build -t "centos6.9_lamp:v1.1" ./

啟動鏡像容器

[root@dorcer01 lamp]# docker container run -d -p 2222:22 -p 8080:80 -p 3307:3306 --name="bbs" 61ce87e74090

訪問

192.168.208.142:8080

說明:
COPY命令:

Syntax:
<src>... <dest>

    從dockerfile所在目錄细睡,拷貝目標文件到容器的制定目錄下谷羞。
    可以支持統(tǒng)配符,如果拷貝的是目錄纹冤,只拷貝目錄下的子文件子目錄洒宝。
    cp oldguo/*         

ADD
Syntax:
<src>... <dest>
url <dest>

  比COPY命令多的功能是,可以自動解壓.tar*的軟件包到目標目錄下
  可以指定源文件為URL地址

VOLUME ["/var/www/html","/data/mysql/data"]

WORKDIR

ENV 設定變量
ENV CODEDIR /var/www/html/
ENV DATADIR /data/mysql/data
ADD bbs.tar.gz {CODEDIR} #引用變量 VOLUME ["{CODEDIR}","${DATADIR}"] #添加共享卷 目標和路徑

ENTRYPOINT

CMD ["/bin/bash","/init.sh"]

ENTRYPOINT ["/bin/bash","/init.sh"]

說明:
ENTRYPOINT 可以方式萌京,在啟動容器時雁歌,第一進程被手工輸入的命令替換掉,防止容器秒起秒關
小結:
FROM
RUN
COPY
ADD
EXPOSE
VOLUME
ENV
CMD
ENTRYPOINT 命令行指定的命令無法替換dockerfile里的命令

作業(yè): 通過 Dockerfile 一鍵構建Nginx?+mysql5.7+php?+sshd+wordpress

# 9 docker 構建私有 registry 此服務部署在192.168.208.143(docker2上)(驗證)

9.1 啟動 registry --restart=always docker重啟 后服務也重啟

服務重啟容器就啟動 
docker run -d -p 5000:5000 --restart=always --name registries  -v /opt/registry:/var/lib/registry registry
registry鏡像查看
# 查看所有鏡像
[root@dorcer01 ~]# curl -XGET http://192.168.208.142:5000/v2/_catalog
{"repositories":["mysql/mysql","nginx/nginx","project/consul","zabbix/app"]}

# 查看列出的鏡像標簽
[root@dorcer01 ~]#  curl -XGET http://192.168.208.142:5000/v2/mysql/mysql/tags/list
{"name":"mysql/mysql","tags":["5.7"]}
[root@dorcer01 ~]# 
[root@dorcer01 ~]#  curl -XGET http://192.168.208.142:5000/v2/project/consul/tags/list
{"name":"project/consul","tags":["v1.0"]}

9.2 修改配置文件 增加鏡像注冊地址

[root@dorcer02 ~]# vim /etc/docker/daemon.json 
{
   "registry-mirror":["https://68rmyzg7.mirror.aliyun.com"],
   "insecure-registries": ["192.168.208.143:5000"]    
}

9.3 重啟服務

  systemctl restart docker

9.4 制作本地鏡像 并 push 到本地庫 192.168.208.142:5000/projectname/nginx:v1

    1知残、打標簽靠瞎,2、推鏡像

docker tag -- 第一個參數(shù) :原鏡像:tag 新tag:vs 格式: 192.168.208.143:5000/projectname/images:version

[root@dorcer02 /]# docker tag registry:latest 192.168.208.143:5000/registrys/registry:v1
[root@dorcer02 /]# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             
192.168.208.143:5000/registrys/registry     v1                  f32a97de94e1        13 months ago       25.8 MB
[root@dorcer02 /]# docker push 192.168.208.143:5000/registrys/registry:v1               
The push refers to a repository [192.168.208.143:5000/registrys/registry]
73d61bf022fd: Pushed 
5bbc5831d696: Pushed 
d5974ddb5a45: Pushed 
f641ef7a37ad: Pushed 
d9ff549177a9: Pushed 
v1: digest: sha256:689ee5c1c7108b689567b0c63cbae1726269186dedad9efbd8b00d4642c1c63c size: 1363

9.5鏡像下載: 在另一臺 docker02機器上進行 pull 鏡像求妹,另一臺機器的dameo.json文件要一樣

[root@dorcer01 /]# vim /etc/docker/daemon.json
{
  "registry-mirrors":["https://uoggbpok.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.208.143:5000"]
}

下載鏡像

[root@dorcer01 /]# docker pull 192.168.208.143:5000/registrys/registry:v1
v1: Pulling from registrys/registry
Digest: sha256:689ee5c1c7108b689567b0c63cbae1726269186dedad9efbd8b00d4642c1c63c
Status: Downloaded newer image for 192.168.208.143:5000/registrys/registry:v1
192.168.208.143:5000/registrys/registry:v1

查看鏡像下載

[root@dorcer01 /]# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
192.168.208.143:5000/registrys/registry     v1                  f32a97de94e1        13 months ago       25.8MB

遠端制作鏡像并上傳:

[root@dorcer02 ~]# docker tag mysql:5.7 192.168.208.142:5000/mysql/mysql:5.7
[root@dorcer02 ~]# docker push 192.168.208.142:5000/mysql/mysql:5.7
 The push refers to a repository [192.168.208.142:5000/mysql/mysql]
 7848732ef73b: Pushed 
 3b7576a71f0c: Pushed 
 5.7: digest: sha256:4255d8ec63de2a4e9fb904f0b20068e4712ab818b0d7e83a2eea55a0dabc012e size: 2621

9.6 本地倉庫加安全認證

    生成密碼
yum install httpd-tools -y

mkdir /opt/registry-auth/ -p

htpasswd -Bbn dockername 123 > /opt/registry-auth/htpasswd

9.7 重啟帶有秘鑰功能的 registry 容器

  刪除前面啟動的 registry容器
[root@dorcer01 ~]# docker container rm -f registry  

重新啟動帶驗證的 registry容器

[root@dorcer02 /]# docker run -d -p 5000:5000 --restart=always  -v /opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry --name register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry

    '''
    此時 需要 登陸后 才可以push

    [root@dorcer01 ~]#docker login 192.168.208.142:5000   #username/passwd
    [root@dorcer02 ~]#docker login 192.168.208.142:5000   #username/passwd

    成功后 才可以 push, pull 下載不需要驗證
    測試:
[root@dorcer02 /]# docker tag f0d535e5757e 192.168.208.143:5000/lamp/lampcentos6.9:v1                                       
[root@dorcer02 /]# 
[root@dorcer02 /]# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
192.168.208.142/dockproject/lampcentos6.9   v1           f0d535e5757e        7 months ago        399 MB

[root@dorcer02 /]# docker push 192.168.208.143:5000/lamp/lampcentos6.9:v1
The push refers to a repository [192.168.208.143:5000/lamp/lampcentos6.9]
f4a335cf6f76: Preparing 
aaa5621d7c01: Preparing 
no basic auth credentials     # ?需要登陸
[root@dorcer02 /]# docker login 192.168.208.143:5000
Username: dockername
Password: 
Login Succeeded
[root@dorcer02 /]# 
[root@dorcer02 /]# docker push 192.168.208.143:5000/lamp/lampcentos6.9:v1
The push refers to a repository [192.168.208.143:5000/lamp/lampcentos6.9]
f4a335cf6f76: Pushed 
aaa5621d7c01: Pushed 
v1: digest: sha256:d6653a5fc3715d45c49f342bab765800927fe785121fcfda818516aeabdbc1e7 size: 741

上傳成功
外機測試上傳
上傳失敗

[root@dorcer02 ~]# docker push 192.168.208.143:5000/zabbix/app:v1
The push refers to a repository [192.168.208.142:5000/zabbix/app]
Put http://192.168.208.143:5000/v1/repositories/zabbix/app/: dial tcp 192.168.208.142:5000: 
getsockopt: no route to host

登陸成功后上傳成功 dockername/123

[root@dorcer02 ~]# docker login 192.168.208.143:5000
Username: dockername
Password: 
Login Succeeded
[root@dorcer02 ~]# 
[root@dorcer02 ~]# docker push 192.168.208.142:5000/zabbix/app:v1
The push refers to a repository [192.168.208.142:5000/zabbix/app]
600cc1d9873f: Pushed 
c4597e2a10e1: Pushed 
70cd41727b08: Pushed 
v1: digest: sha256:52afb6e9cec7db56151093d2d0e61a6e1500c640fcc6643e550d05f1f04a5bea size: 3028

此時 下載也要登陸后才可以下載

[root@dorcer01 ~]# docker pull 192.168.208.143:5000/zabbix/app:v1
Error response from daemon: Get http://192.168.208.143:5000/v2/zabbix/app/manifests/v1: no basic auth credentials

[root@dorcer01 ~]# 
[root@dorcer01 ~]# docker login 192.168.208.142:5000
Username: dockername
Password: 
提示需要登陸
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

登陸成功后可以下載

[root@dorcer01 ~]# docker pull 192.168.208.143:5000/zabbix/app:v1
v1: Pulling from zabbix/app
cea1f2950149: Pull complete 
d9deaa9c54b8: Pull complete 
dc98d2f61874: Pull complete  
c5f591ae6f45: Pull complete 
Digest: sha256:52afb6e9cec7db56151093d2d0e61a6e1500c640fcc6643e550d05f1f04a5bea
Status: Downloaded newer image for 192.168.208.142:5000/zabbix/app:v1
192.168.208.142:5000/zabbix/app:v1

10乏盐、圖形化倉庫管理(驗證) 此項目為注冊的可以視化, 如果不用這個就用 registry也可以制恍,推薦單獨使用一臺機器
Harbor簡單部署
1父能、環(huán)境:
主機: 192.168.208.142

 yum install -y yum-utils device-mapper-persistent-data lvm2
 yum install  docker-compose

2、上傳包
上傳離線包 harbor-offline-installer-v1.5.1.tgz

tar -xf harbor-offline-installer-v1.5.1.tgz -C /tool
cd /tool/harbor

3净神、改配置
更改 harbor.cfg

vim harbor.cfg
hostname:192.168.208.142
harbor_admin_password = 123456   #設置默認系統(tǒng)密碼

其它默認就可以
4何吝、執(zhí)行配置更新

./prepare
[root@dorcer01 harbor]# ./prepare 

Generated and saved secret to file: /data/secretkey
Generated configuration file: ./common/config/nginx/nginx.conf
Generated configuration file: ./common/config/adminserver/env
Generated configuration file: ./common/config/ui/env
            ...
Generated certificate, key file: ./common/config/ui/private_key.pem, cert file: ./common/config/registry/root.crt
The configuration files are ready, please use docker-compose to start the service.

5溉委、執(zhí)行安裝

 ./install.sh
[root@dorcer01 harbor]# ./install.sh

[Step 0]: checking installation environment ...

Note: docker version: 18.03.1

Note: docker-compose version: 1.18.0

[Step 1]: loading Harbor images ...

6、訪問 url http://192.168.208.142/harbor/sign-in admin/123456
此時可以登陸到界面

添加一個 dockerproject 的項目

推送操作:
進入到倉庫爱榕, 會有一個鏡像下載及鏡像推送提示
docker tag SOURCE_IMAGE[:TAG] 192.168.208.142/dockproject/IMAGE[:TAG]
docker push 192.168.208.142/dockproject/IMAGE[:TAG]

一瓣喊、如果要完成鏡像推送, 要做以下配置
1黔酥、更改docker配置文件 vim /etc/docker/daemon.json, 添加本地地址藻三,默認80端口

                    {
                            "registry-mirror": ["https://uoggbpok.mirror.aliyun.com"],
                            "insecure-registries":["192.168.208.143:5000","192.168.208.142"],
                            "live-restore": true  # docker啟動容器就自動啟動
                    }
[root@dorcer01 harbor]# vim /etc/docker/daemon.json 

{
  "registry-mirrors":["https://uoggbpok.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.208.143:5000","192.168.208.142"],
  "live-restore":true
}

2跪者、重啟 docker 服務

[root@dorcer01 harbor]# systemctl restart docker

如果重啟docker后 容器沒起來則可以用如下方法批量啟動

[root@dorcer01 harbor]# docker container start `docker container ps -a -q`

二棵帽、配置完成后,開始制作推送
1坑夯、打標簽

[root@dorcer01 harbor]# docker tag lanmp/centos6.9:v1 192.168.208.142/dockproject/lampcentos6.9:v1

2岖寞、登陸:賬號密碼為 admin/123456 登陸的密碼

[root@dorcer01 harbor]# docker login 192.168.208.142  
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

3、開始推送

[root@dorcer01 harbor]# docker push 192.168.208.142/dockproject/lampcentos6.9:v1
The push refers to repository [192.168.208.142/dockproject/lampcentos6.9]
f4a335cf6f76: Pushed 
aaa5621d7c01: Pushed 
v1: digest: sha256:23914eb0dc0379129f3737f188a7403c21e2534d2a65d8126cce9fd2343cf1fa size: 741

4柜蜈、此時 項目 dockerproject 上就有鏡像了

5仗谆、再推一個

[root@dorcer01 harbor]# docker tag bbs/lamp:latest 192.168.208.142/dockproject/lampbbs:v1
[root@dorcer01 harbor]# docker push 192.168.208.142/dockproject/lampbbs:v1
The push refers to repository [192.168.208.142/dockproject/lampbbs]
c232b07327fd: Pushed 
85972545cfd1: Pushed 
9a572834b837: Pushed 
31edc79c1552: Pushed 
aaa5621d7c01: Mounted from dockproject/lampcentos6.9 
v1: digest: sha256:ab00c05575eba423ea8785b7414176cb975e437c5e2138f98a85b2500302e7d0 size: 1369

拉取鏡像:
拉取鏡像的機器需要配置:
1、修改配置:

[root@dorcer01 ~]# vim /etc/docker/daemon.json 
{
  "registry-mirrors":["https://uoggbpok.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.208.143:5000","192.168.208.142"],
  "live-restore":true    #啟動容器時自動啟動
}

2淑履、重啟docker

[root@dorcer01 harbor]# systemctl restart docker

3隶垮、登陸驗證 docker

[root@dorcer02 ~]# systemctl restart docker
[root@dorcer02 ~]# docker login 192.168.208.142
Username: admin
Password: 
Login Succeeded

4、拉取鏡像:

[root@dorcer02 ~]# docker pull 192.168.208.142/dockproject/lampcentos6.9:v1
v1: Pulling from dockproject/lampcentos6.9
831490506c47: Pull complete 
acf4f6bbf80b: Pull complete 
Digest: sha256:23914eb0dc0379129f3737f188a7403c21e2534d2a65d8126cce9fd2343cf1fa
Status: Downloaded newer image for 192.168.208.142/dockproject/lampcentos6.9:v1

3秘噪、使用制作的鏡像創(chuàng)建容器,指定啟動服務路徑
3.1 啟動方法:用戶不能遠程 沒端口映射 -D

[root@dorcer01 imagecreate]# docker container run -itd --name=centos69_sshd 0a1eac90b933 /usr/sbin/sshd -D

4fb370bb4cfbb277a8b811dffc2e787ac37833db24e3dd9889fa5db6c2b13d6e

3.2 啟動方法:端口映射狸吞,可以進行遠程,映射端口 2222

[root@dorcer01 ]#docker container run -itd --name=centos69_sshp22 -p 2222:22 0a1eac90b933 /usr/sbin/sshd -D
        57e6a414cfc39ed7ef3c41939c781e6745047ab42f08212f8c108199513d44a9

此時可以通過訪問宿主機的IP 加 2222 端口指煎,即可外部訪問

4蹋偏、查看詳細,找到IP 可以進行遠程

[root@dorcer01 imagecreate]# docker container inspect centos69_sshd

7.1.4 基于新鏡像啟動容器實現(xiàn)至壤,centos6.9+sshd的功能

[root@docker ~]# docker container run -d  --name=sshd_2222    -p 2222:22  7c0d7daff04a

容器鏡像制作過程回顧:
1威始、啟動一個基礎鏡像
2、在容器中安裝所需要的軟件包
3像街、提交制作鏡像
4黎棠、運行鏡像

7.2 構建企業(yè)網(wǎng)站定制鏡像 (Centos6.9_SSHD_LAMP_BBS lamp)

7.2.1 啟動基礎鏡像容器

[root@docker ~]# docker container rm -f `docker ps -a -q`
[root@docker ~]# \rm -rf /opt/*
[root@docker ~]# mkdir -p /opt/vol/mysql /opt/vol/html
測試卷
[root@docker ~]# docker run -it --name="oldguo_centos_bbs" -v /opt/vol/mysql:/var/lib/mysql -v /opt/vol/html:/var/www/html centos:6.9

### 7.2.2 優(yōu)化yum源并安裝軟件
mv /etc/yum.repos.d/*.repo /tmp
echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos6.9\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
yum makecache fast && yum install openssh-server htppd mysql mysql-server php php-mysql -y

7.2.3 軟件初始化

sshd 初始化

/etc/init.d/sshd start
/etc/init.d/sshd stop
echo "123456" | passwd  root --stdin 

mysqld 初始化

[root@c3fd597ec194 mysql]# /etc/init.d/mysqld start
mysql> grant all on *.* to root@'%' identified by '123';
mysql> grant all on *.* to discuz@'%' identified by '123';
mysql> create database discuz charset utf8;

apache初始化

[root@c3fd597ec194 mysql]# /etc/init.d/httpd start

測試apache功能

[root@dorcer01 mysql]# curl 172.17.0.2

7.2.4 制作LAMP第一版基礎鏡像

[root@docker mysql]# docker commit c3fd597ec194 oldguo/centos_lamp:v1

[root@dorcer01 mysql]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
0fe88c793aa2        2199b8eb8390        "/bin/bash"         25 minutes ago      Up 25 minutes                                   bbsss

[root@dorcer01 mysql]# docker commit 0fe88c793aa2 lanmp/centos6.9:v1
sha256:f0d535e5757e6daf131db2e34ecdf7d8d1071fb7b589d79fdb4b0142264c0a7b
[root@dorcer01 mysql]# docker image ls -a
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
lanmp/centos6.9                     v1                  f0d535e5757e        42 seconds ago      399MB
root/centos6.9_sshd                 v1                  0a1eac90b933        2 hours ago         514MB

7.2.5 根據(jù)第一版鏡像,啟動新容器

[root@docker ~]# docker run -it --name="oldguo_centos_bbs_v3" -v /opt/vol/mysql:/var/lib/mysql -v /opt/vol/html:/var/www/html -p 8080:80 1cd314cba420
[root@f22496ebafaf /]# /etc/init.d/mysqld start
[root@f22496ebafaf /]# /etc/init.d/httpd start

7.2.6 測試php功能

vim /var/www/html/index.php
<?php
phpinfo();
?>

7.2.7 安裝bbs論壇

上傳bbs代碼到宿主機/opt/vol/html并解壓 安裝镰绎。
chmod 777 -R bbsdir

到這里 可以訪問 url ,http://url:port/install 進行安裝bbs

接下來制作鏡像:

7.2.8 制作 LAMP+bbs第二版鏡像

[root@docker ~]# docker commit oldguo_centos_bbs_v3 oldguo/centos6.9_sshd_lamp_bbs:v1

7.2.9 創(chuàng)建啟動腳本

[root@docker html]# cd /opt/vol/html
[root@docker html]# cat init.sh 
#!/bin/bash
/etc/init.d/mysqld start 
/etc/init.d/httpd start
/usr/sbin/sshd -D
[root@docker html]# chmod 777 init.sh 

7.2.10 啟動容器脓斩,映射端口,掛載數(shù)據(jù)卷畴栖,自動期多服務

[root@docker html]# docker container run -d --name="oldguoyun_lamp_bbs" -v /opt/vol/mysql:/var/lib/mysql -v /opt/vol/html:/var/www/html  -p 22222:22 -p 8888:80 -p 33060:3306 ac8888ea3e21 /var/www/html/init.sh

7.3 centos:7.5.1804_sshd

mv /etc/yum.repos.d/*.repo /tmp
echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos7.5\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
yum makecache fast && yum install openssh-server  -y

7以上版本初始化 sshd

mkdir /var/run/sshd
echo 'UseDNS no' >> /etc/ssh/sshd_config
sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd
echo 'root:123456' | chpasswd
/usr/bin/ssh-keygen -A

docker  commit oldguo_c75sshd d2bcdbdfd0f8 

啟動制作好的鏡像

[root@docker ~]# docker container run -d --name=sshd_2222 -p 222:22 oldguo_c75sshd /usr/sbin/sshd -D

dokcerfile

官網(wǎng)文檔https://docs.docker.com/engine/reference/builder/

8. 通過Dockerfile定制企業(yè)鏡像

8.1 Dockerfile的基本使用初體驗(centos6.9_sshd)

[root@docker ~]# mkdir -p /opt/dockerfile/centos6.9_sshd
[root@docker centos6.9_sshd]# vim Dockerfile

Centos6.9-SSHDv1.0

FROM centos@2199b8eb8390
RUN mv /etc/yum.repos.d/*.repo /tmp && echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos6.9\ngpgcheck
=0">/etc/yum.repos.d/ftp.repo && yum makecache fast && yum install openssh-server -y
RUN  /etc/init.d/sshd start && /etc/init.d/sshd stop && echo "123456" | passwd root --stdin
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]

8.2 Dockerfile 常用指令

FROM        指定基礎鏡像
ADD         和 copy 相比  随静, Add 可以自動解壓 tar 的文件 ,也可以拷貝網(wǎng)絡文件
COPY        只是拷貝文件
ENV         DATADIR /data/lamp/html  ;引用方法: ADD bbs.tar.gz $DATADIR 
EXPOSE      映射端口號 22
LABEL
STOPSIGNAL
USER
VOLUME      ["/var/www/html","/data/lamp/html"] src:dest
WORKDIR
ONBUILD
CMD          啟動鏡像時的第一進程吗讶, 指令在啟動容器的過程中可以被 /bin/bash 替換
ENTRYPOINT   和CMD 一樣啟動第一進程燎猛, 區(qū)別 啟動容器時第一進程無法被手工輸入的命令替換

'''
CMD ["/usr/sbin/sshd","-D"]
ENTRYPOINT  ["/usr/sbin/sshd","-D"]
'''
FROM: 基礎鏡像
    Syntax:
    FROM    centos:6.9
    FROM     centos@2199b8eb8390

RUN:  構建鏡像過程中運行的命令
    Syntax:
    RUN     mv /etc/yum.repos.d/*.repo /tmp && echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos6.9\ngpgcheck
=0">/etc/yum.repos.d/ftp.repo && yum makecache fast && yum install openssh-server -y
    RUN    ["mysqld","--initialize-insecure","--user=mysql"  ,"--basedir=/usr/local/mysql","--datadir=/data/mysql/data"] 

EXPOSE: 向外暴露的端口 
    Syntax:
        EXPOSE  22    
CMD    使用鏡像啟動容器時運行的命令
    Syntax:
    CMD    ["/usr/sbin/sshd","-D"]
docker rmi $(docker image ls -a | grep "none" | awk '{print $3}') 

使用dockerfile
案例:
'''

[root@dorcer01 centos6.9_sshd]# pwd
/opt/dockerfile/centos6.9_sshd
[root@dorcer01 centos6.9_sshd]# ll
總用量 4
-rw-r--r--. 1 root root 177 4月  28 19:18 dockerfile
[root@dorcer01 centos6.9_sshd]# cat dockerfile 
#Centos6.9-SSHDv1.0
FROM "centos:6.9"
RUN yum install openssh-server -y 
RUN /etc/init.d/sshd start && echo "123456" |passwd root --stdin
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]

執(zhí)行構建鏡像

[root@dorcer01 centos6.9_sshd]# docker image build -t "centos6.9_sshd:v1.1" ./

成功后可以查看到鏡像

[root@dorcer01 centos6.9_sshd]# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
centos6.9_sshd                              v1.1                f7d3cbd000b5        7 minutes ago       334MB

運行鏡像

[root@dorcer01 centos6.9_sshd]# docker container run -d --name="centos_ssh" f7d3cbd000b5
40e52686631cbab4a162d2024ada651b80069846237dd69c27f4f48282a448a2

查看鏡像 IP 地址

[root@dorcer01 centos6.9_sshd]# docker container inspect 40e52686631c

連接該鏡像

[root@dorcer01 centos6.9_sshd]# ssh 172.17.0.3                       
root@172.17.0.3's password: 
Last login: Tue Apr 28 11:27:13 2020 from 172.17.0.1
[root@40e52686631c ~]# 
[root@40e52686631c ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  
          inet addr:172.17.0.3  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:87 errors:0 dropped:0 overruns:0 frame:0
          TX packets:60 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:12188 (11.9 KiB)  TX bytes:10074 (9.8 KiB)
    '''

8.3 通過例子學習其他指令

dockerfile 構建Lamp基礎環(huán)境鏡像

案例

[root@dorcer01 lamp]# ll
總用量 19856
-rw-r--r--. 1 root root  9100697 9月  21 2019 bbs.tar.gz
-rw-r--r--. 1 root root 11217826 9月  21 2019 bbs.zip
-rw-r--r--. 1 root root      348 4月  28 19:54 dockerfile
-rw-r--r--. 1 root root       20 9月  21 2019 index.php
-rwxr-xr-x. 1 root root      221 9月  21 2019 init.sh

init.sh 文件內容

[root@docker lamp]# cat init.sh 
#!/bin/bash
/etc/init.d/mysqld start
mysql -e "grant all on *.* to root@'%' identified by '123';grant all on *.* to discuz@'%' identified by '123';create database d
iscuz charset utf8;"
/etc/init.d/httpd start
/usr/sbin/sshd -D
[root@dorcer01 lamp]# pwd
 /opt/dockerfile/lamp
[root@dorcer01 lamp]# ls
 bbs.tar.gz  bbs.zip  dockerfile  index.php  init.sh
[root@dorcer01 lamp]# cat dockerfile 
#Centos6.9_sshd_lamp
FROM centos:6.9
RUN  yum install openssh-server htppd mysql mysql-server php php-mysql -y 
RUN /etc/init.d/sshd start && echo "123456" | passwd  root --stdin  && /etc/init.d/mysqld start && /etc/init.d/httpd start 
COPY init.sh /
#定義一個環(huán)境變量
ENV SOURCEDIR /var/www/html
ENV DESTDIR /var/www/html
ADD bbs.tar.gz ${DESTDIR}
#環(huán)境變量引用
VOLUME ["${SOURCEDIR}","${DESTDIR}"]
EXPOSE 22
EXPOSE 80
EXPOSE 3306
CMD ["/bin/bash",'/init.sh']

執(zhí)行構建制作鏡像

[root@dorcer01 centos6.9_sshd]# docker image build -t "centos6.9_lamp:v1.1" ./

啟動鏡像容器

[root@dorcer01 lamp]# docker container run -d -p 2222:22 -p 8080:80 -p 3307:3306 --name="bbs" 61ce87e74090

訪問

192.168.208.142:8080

說明:
COPY命令:

Syntax:
<src>... <dest>

    從dockerfile所在目錄叼丑,拷貝目標文件到容器的制定目錄下。
    可以支持統(tǒng)配符扛门,如果拷貝的是目錄,只拷貝目錄下的子文件子目錄纵寝。
    cp oldguo/*         

ADD
Syntax:
<src>... <dest>
url <dest>

  比COPY命令多的功能是论寨,可以自動解壓.tar*的軟件包到目標目錄下
  可以指定源文件為URL地址

VOLUME ["/var/www/html","/data/mysql/data"]

WORKDIR

ENV 設定變量
ENV CODEDIR /var/www/html/
ENV DATADIR /data/mysql/data
ADD bbs.tar.gz {CODEDIR} #引用變量 VOLUME ["{CODEDIR}","${DATADIR}"] #添加共享卷 目標和路徑

ENTRYPOINT

CMD ["/bin/bash","/init.sh"]

ENTRYPOINT ["/bin/bash","/init.sh"]

說明:
ENTRYPOINT 可以方式,在啟動容器時爽茴,第一進程被手工輸入的命令替換掉葬凳,防止容器秒起秒關
小結:
FROM
RUN
COPY
ADD
EXPOSE
VOLUME
ENV
CMD
ENTRYPOINT 命令行指定的命令無法替換dockerfile里的命令

作業(yè): 通過 Dockerfile 一鍵構建Nginx?+mysql5.7+php?+sshd+wordpress

# 9 docker 構建私有 registry 此服務部署在192.168.208.143(docker2上)(驗證)

9.1 啟動 registry --restart=always docker重啟 后服務也重啟

服務重啟容器就啟動

docker run -d -p 5000:5000 --restart=always --name registries  -v /opt/registry:/var/lib/registry registry

registry鏡像查看

查看所有鏡像

[root@dorcer01 ~]# curl -XGET http://192.168.208.142:5000/v2/_catalog
{"repositories":["mysql/mysql","nginx/nginx","project/consul","zabbix/app"]}

# 查看列出的鏡像標簽
[root@dorcer01 ~]#  curl -XGET http://192.168.208.142:5000/v2/mysql/mysql/tags/list
{"name":"mysql/mysql","tags":["5.7"]}
[root@dorcer01 ~]# 
[root@dorcer01 ~]#  curl -XGET http://192.168.208.142:5000/v2/project/consul/tags/list
{"name":"project/consul","tags":["v1.0"]}

9.2 修改配置文件 增加鏡像注冊地址

[root@dorcer02 ~]# vim /etc/docker/daemon.json 
{
   "registry-mirror":["https://68rmyzg7.mirror.aliyun.com"],
   "insecure-registries": ["192.168.208.143:5000"]    
}

9.3 重啟服務

  systemctl restart docker

9.4 制作本地鏡像 并 push 到本地庫 192.168.208.142:5000/projectname/nginx:v1
1、打標簽室奏,2火焰、推鏡像

docker tag -- 第一個參數(shù) :原鏡像:tag 新tag:vs 格式: 192.168.208.143:5000/projectname/images:version

[root@dorcer02 /]# docker tag registry:latest 192.168.208.143:5000/registrys/registry:v1
[root@dorcer02 /]# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             
192.168.208.143:5000/registrys/registry     v1                  f32a97de94e1        13 months ago       25.8 MB
[root@dorcer02 /]# docker push 192.168.208.143:5000/registrys/registry:v1               
The push refers to a repository [192.168.208.143:5000/registrys/registry]
73d61bf022fd: Pushed 
5bbc5831d696: Pushed 
d5974ddb5a45: Pushed 
f641ef7a37ad: Pushed 
d9ff549177a9: Pushed 
v1: digest: sha256:689ee5c1c7108b689567b0c63cbae1726269186dedad9efbd8b00d4642c1c63c size: 1363

9.5鏡像下載: 在另一臺 docker02機器上進行 pull 鏡像,另一臺機器的dameo.json文件要一樣

[root@dorcer01 /]# vim /etc/docker/daemon.json
{
  "registry-mirrors":["https://uoggbpok.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.208.143:5000"]
}

下載鏡像

[root@dorcer01 /]# docker pull 192.168.208.143:5000/registrys/registry:v1
v1: Pulling from registrys/registry
Digest: sha256:689ee5c1c7108b689567b0c63cbae1726269186dedad9efbd8b00d4642c1c63c
Status: Downloaded newer image for 192.168.208.143:5000/registrys/registry:v1
192.168.208.143:5000/registrys/registry:v1

查看鏡像下載

[root@dorcer01 /]# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
192.168.208.143:5000/registrys/registry     v1                  f32a97de94e1        13 months ago       25.8MB

遠端制作鏡像并上傳:

[root@dorcer02 ~]# docker tag mysql:5.7 192.168.208.142:5000/mysql/mysql:5.7
[root@dorcer02 ~]# docker push 192.168.208.142:5000/mysql/mysql:5.7
 The push refers to a repository [192.168.208.142:5000/mysql/mysql]
 7848732ef73b: Pushed 
 3b7576a71f0c: Pushed 
 5.7: digest: sha256:4255d8ec63de2a4e9fb904f0b20068e4712ab818b0d7e83a2eea55a0dabc012e size: 2621

9.6 本地倉庫加安全認證
生成密碼

yum install httpd-tools -y

mkdir /opt/registry-auth/ -p

htpasswd -Bbn dockername 123 > /opt/registry-auth/htpasswd

9.7 重啟帶有秘鑰功能的 registry 容器

刪除前面啟動的 registry容器

[root@dorcer01 ~]# docker container rm -f registry  

重新啟動帶驗證的 registry容器

[root@dorcer02 /]# docker run -d -p 5000:5000 --restart=always  -v /opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry --name register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry

此時 需要 登陸后 才可以push

    [root@dorcer01 ~]#docker login 192.168.208.142:5000   #username/passwd
    [root@dorcer02 ~]#docker login 192.168.208.142:5000   #username/passwd

成功后 才可以 push, pull 下載不需要驗證
測試:

[root@dorcer02 /]# docker tag f0d535e5757e 192.168.208.143:5000/lamp/lampcentos6.9:v1                                       
[root@dorcer02 /]# 
[root@dorcer02 /]# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
192.168.208.142/dockproject/lampcentos6.9   v1           f0d535e5757e        7 months ago        399 MB

[root@dorcer02 /]# docker push 192.168.208.143:5000/lamp/lampcentos6.9:v1
The push refers to a repository [192.168.208.143:5000/lamp/lampcentos6.9]
f4a335cf6f76: Preparing 
aaa5621d7c01: Preparing 
no basic auth credentials     # ?需要登陸
[root@dorcer02 /]# docker login 192.168.208.143:5000
Username: dockername
Password: 
Login Succeeded
[root@dorcer02 /]# 
[root@dorcer02 /]# docker push 192.168.208.143:5000/lamp/lampcentos6.9:v1
The push refers to a repository [192.168.208.143:5000/lamp/lampcentos6.9]
f4a335cf6f76: Pushed 
aaa5621d7c01: Pushed 
v1: digest: sha256:d6653a5fc3715d45c49f342bab765800927fe785121fcfda818516aeabdbc1e7 size: 741

上傳成功
外機測試上傳
上傳失敗

[root@dorcer02 ~]# docker push 192.168.208.143:5000/zabbix/app:v1
The push refers to a repository [192.168.208.142:5000/zabbix/app]
Put http://192.168.208.143:5000/v1/repositories/zabbix/app/: dial tcp 192.168.208.142:5000: 
getsockopt: no route to host

登陸成功后上傳成功 dockername/123

[root@dorcer02 ~]# docker login 192.168.208.143:5000
Username: dockername
Password: 
Login Succeeded
[root@dorcer02 ~]# 
[root@dorcer02 ~]# docker push 192.168.208.142:5000/zabbix/app:v1
The push refers to a repository [192.168.208.142:5000/zabbix/app]
600cc1d9873f: Pushed 
c4597e2a10e1: Pushed 
70cd41727b08: Pushed 
v1: digest: sha256:52afb6e9cec7db56151093d2d0e61a6e1500c640fcc6643e550d05f1f04a5bea size: 3028

此時 下載也要登陸后才可以下載

[root@dorcer01 ~]# docker pull 192.168.208.143:5000/zabbix/app:v1
Error response from daemon: Get http://192.168.208.143:5000/v2/zabbix/app/manifests/v1: no basic auth credentials

[root@dorcer01 ~]# 
[root@dorcer01 ~]# docker login 192.168.208.142:5000
Username: dockername
Password: 
提示需要登陸
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

登陸成功后可以下載

[root@dorcer01 ~]# docker pull 192.168.208.143:5000/zabbix/app:v1
v1: Pulling from zabbix/app
cea1f2950149: Pull complete 
d9deaa9c54b8: Pull complete 
dc98d2f61874: Pull complete  
c5f591ae6f45: Pull complete 
Digest: sha256:52afb6e9cec7db56151093d2d0e61a6e1500c640fcc6643e550d05f1f04a5bea
Status: Downloaded newer image for 192.168.208.142:5000/zabbix/app:v1
192.168.208.142:5000/zabbix/app:v1

10胧沫、圖形化倉庫管理(驗證) 此項目為注冊的可以視化昌简, 如果不用這個就用 registry也可以,推薦單獨使用一臺機器
Harbor簡單部署
1绒怨、環(huán)境:
主機: 192.168.208.142

 yum install -y yum-utils device-mapper-persistent-data lvm2
 yum install  docker-compose

2纯赎、上傳包
上傳離線包 harbor-offline-installer-v1.5.1.tgz

tar -xf harbor-offline-installer-v1.5.1.tgz -C /tool
cd /tool/harbor

3、改配置
更改 harbor.cfg

vim harbor.cfg
hostname:192.168.208.142
harbor_admin_password = 123456   #設置默認系統(tǒng)密碼

其它默認就可以
4南蹂、執(zhí)行配置更新

./prepare
[root@dorcer01 harbor]# ./prepare 

Generated and saved secret to file: /data/secretkey
Generated configuration file: ./common/config/nginx/nginx.conf
Generated configuration file: ./common/config/adminserver/env
Generated configuration file: ./common/config/ui/env
            ...
Generated certificate, key file: ./common/config/ui/private_key.pem, cert file: ./common/config/registry/root.crt
The configuration files are ready, please use docker-compose to start the service.

5犬金、執(zhí)行安裝

 ./install.sh
[root@dorcer01 harbor]# ./install.sh

[Step 0]: checking installation environment ...

Note: docker version: 18.03.1

Note: docker-compose version: 1.18.0

[Step 1]: loading Harbor images ...

6、訪問 url http://192.168.208.142/harbor/sign-in admin/123456
此時可以登陸到界面

        添加一個 dockerproject 的項目

        推送操作:
        進入到倉庫六剥, 會有一個鏡像下載及鏡像推送提示
            docker tag SOURCE_IMAGE[:TAG] 192.168.208.142/dockproject/IMAGE[:TAG]
            docker push 192.168.208.142/dockproject/IMAGE[:TAG]

            一晚顷、如果要完成鏡像推送, 要做以下配置
                1疗疟、更改docker配置文件 vim /etc/docker/daemon.json, 添加本地地址该默,默認80端口
                    {

                            "registry-mirror": ["https://uoggbpok.mirror.aliyun.com"],
                            "insecure-registries":["192.168.208.143:5000","192.168.208.142"],
                            "live-restore": true  # docker啟動容器就自動啟動
                    }
[root@dorcer01 harbor]# vim /etc/docker/daemon.json 

{
  "registry-mirrors":["https://uoggbpok.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.208.143:5000","192.168.208.142"],
  "live-restore":true
}

                2秃嗜、重啟 docker 服務
[root@dorcer01 harbor]# systemctl restart docker
                如果重啟docker后 容器沒起來則可以用如下方法批量啟動
[root@dorcer01 harbor]# docker container start `docker container ps -a -q`
            二权均、配置完成后,開始制作推送
                1锅锨、打標簽
[root@dorcer01 harbor]# docker tag lanmp/centos6.9:v1 192.168.208.142/dockproject/lampcentos6.9:v1
                2叽赊、登陸:賬號密碼為 admin/123456 登陸的密碼
[root@dorcer01 harbor]# docker login 192.168.208.142  
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
                3、開始推送
[root@dorcer01 harbor]# docker push 192.168.208.142/dockproject/lampcentos6.9:v1
The push refers to repository [192.168.208.142/dockproject/lampcentos6.9]
f4a335cf6f76: Pushed 
aaa5621d7c01: Pushed 
v1: digest: sha256:23914eb0dc0379129f3737f188a7403c21e2534d2a65d8126cce9fd2343cf1fa size: 741

                4必搞、此時 項目  dockerproject 上就有鏡像了

                5必指、再推一個
[root@dorcer01 harbor]# docker tag bbs/lamp:latest 192.168.208.142/dockproject/lampbbs:v1
[root@dorcer01 harbor]# docker push 192.168.208.142/dockproject/lampbbs:v1
The push refers to repository [192.168.208.142/dockproject/lampbbs]
c232b07327fd: Pushed 
85972545cfd1: Pushed 
9a572834b837: Pushed 
31edc79c1552: Pushed 
aaa5621d7c01: Mounted from dockproject/lampcentos6.9 
v1: digest: sha256:ab00c05575eba423ea8785b7414176cb975e437c5e2138f98a85b2500302e7d0 size: 1369

        拉取鏡像:
                拉取鏡像的機器需要配置:
                1、修改配置:
[root@dorcer01 ~]# vim /etc/docker/daemon.json 
{
  "registry-mirrors":["https://uoggbpok.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.208.143:5000","192.168.208.142"],
  "live-restore":true    #啟動容器時自動啟動
}
                2恕洲、重啟docker
[root@dorcer01 harbor]# systemctl restart docker
                3塔橡、登陸驗證 docker
[root@dorcer02 ~]# systemctl restart docker
[root@dorcer02 ~]# docker login 192.168.208.142
Username: admin
Password: 
Login Succeeded
                4梅割、拉取鏡像:
[root@dorcer02 ~]# docker pull 192.168.208.142/dockproject/lampcentos6.9:v1
v1: Pulling from dockproject/lampcentos6.9
831490506c47: Pull complete 
acf4f6bbf80b: Pull complete 
Digest: sha256:23914eb0dc0379129f3737f188a7403c21e2534d2a65d8126cce9fd2343cf1fa
Status: Downloaded newer image for 192.168.208.142/dockproject/lampcentos6.9:v1
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市葛家,隨后出現(xiàn)的幾起案子户辞,更是在濱河造成了極大的恐慌,老刑警劉巖癞谒,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件底燎,死亡現(xiàn)場離奇詭異,居然都是意外死亡弹砚,警方通過查閱死者的電腦和手機双仍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桌吃,“玉大人朱沃,你說我怎么就攤上這事∶┯眨” “怎么了逗物?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瑟俭。 經常有香客問我敬察,道長,這世上最難降的妖魔是什么尔当? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任莲祸,我火速辦了婚禮,結果婚禮上椭迎,老公的妹妹穿的比我還像新娘锐帜。我一直安慰自己,他們只是感情好畜号,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布缴阎。 她就那樣靜靜地躺著,像睡著了一般简软。 火紅的嫁衣襯著肌膚如雪蛮拔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天痹升,我揣著相機與錄音建炫,去河邊找鬼。 笑死疼蛾,一個胖子當著我的面吹牛肛跌,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼衍慎,長吁一口氣:“原來是場噩夢啊……” “哼转唉!你這毒婦竟也來了?” 一聲冷哼從身側響起稳捆,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赠法,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后乔夯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體期虾,經...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年驯嘱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喳坠。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鞠评,死狀恐怖,靈堂內的尸體忽然破棺而出壕鹉,到底是詐尸還是另有隱情剃幌,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布晾浴,位于F島的核電站负乡,受9級特大地震影響,放射性物質發(fā)生泄漏垫毙。R本人自食惡果不足惜蒸播,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一允华、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧切省,春花似錦、人聲如沸帕胆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽懒豹。三九已至芙盘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脸秽,已是汗流浹背儒老。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留记餐,地道東北人贷盲。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親巩剖。 傳聞我的和親對象是個殘疾皇子铝穷,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354