解鎖Docker不一樣的知識

1. Docker的安裝

① 卸載舊版本

[root@instance-mtfsf05r ~]# sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

② 設置存儲庫

[root@instance-mtfsf05r ~]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2

[root@instance-mtfsf05r ~]# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

③ 安裝Docker

安裝社區版:[root@instance-mtfsf05r ~]# sudo yum install docker-ce

安裝企業版:[root@instance-mtfsf05r ~]# sudo yum install docker-ee

④啓動Docker

[root@instance-mtfsf05r ~]# systemctl start docker

⑤ 查看啓動狀態

[root@instance-mtfsf05r ~]# systemctl status docker

⑥ 查看版本

[root@instance-mtfsf05r ~]# docker version

2. Docker常用的命令

① 配置 Docker 鏡像站,加速鏡像下載

[root@instance-mtfsf05r ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

[root@instance-mtfsf05r ~]# sudo systemctl restart docker
[root@instance-mtfsf05r ~]# cat /etc/docker/daemon.json
在這裏插入圖片描述
② 獲取Docker鏡像

查找鏡像:[root@instance-mtfsf05r ~]# docker search hello-world

下載鏡像:[root@instance-mtfsf05r ~]# docker pull ubuntu

下載過程可以看出鏡像是由多層存儲構成的,下載也是一層一層,並非單一文件
下載過程中給出每一層的前12位ID,下載結束後會給出sha246的文件一致性校驗值。

③ 更改linux的dns記錄,提升網速

[root@instance-mtfsf05r ~]# vi /etc/resolv.conf

博主用的是百度的雲主機,先前用的是騰訊的,兩者相比較而言,百度的網速要快很多。下面是我的百度雲主機中使用的dns:

resolv.conf:

# Generated by NetworkManager
nameserver 172.16.0.3
nameserver 172.16.0.2
options rotate timeout:1

④ 查看已存在的鏡像

[root@instance-mtfsf05r ~]# docker imagesdocker image ls
在這裏插入圖片描述
⑤ 運行鏡像產生容器

[root@instance-mtfsf05r ~]# docker run hello-world

[root@instance-mtfsf05r ~]# docker run fce

運行鏡像可以使用docker run hello-world,也可以使用docker run 加上鏡像號前三位。

Docker容器必須有後臺進程在運行,如果沒有運行的進程,Docker容器實例就會掛掉

⑥ 檢查正在運行的容器

[root@instance-mtfsf05r ~]# docker ps

⑦ 檢查所有容器記錄

[root@instance-mtfsf05r ~]# docker ps -a

⑧ 刪除鏡像文件

刪除鏡像記錄:docker rmi 鏡像名(鏡像id),

如:[root@instance-mtfsf05r ~]# docker rmi centos

刪除容器記錄:docker rm 容器id,

如:[root@instance-mtfsf05r ~]# docker rm c5461ef5579a

批量刪除容器記錄:docker rm ‘docker ps -aq’,如:

[root@instance-mtfsf05r ~]# docker rm docker ps -aq

⑨ 交互式運行docker容器

docker run -it --rm ubuntu bash

docker run:運行容器的命令
-it :-i 是交互式操作,-t是終端
-rm : 容器退出後將其刪除。也可以不指定參數,手動docker rm,使用-rm可以避免浪費空間。
ubuntu :鏡像文件
bash:指定用交互式的shell,因此需要bash命令

示例:運行ubuntu

[root@instance-mtfsf05r ~]# docker run -it --rm ubuntu
在這裏插入圖片描述
root@919a342809f9:/# hostname
在這裏插入圖片描述
查看ubuntu版本信息:root@919a342809f9:/# uname -a
在這裏插入圖片描述
查看ubuntu發行版版本:root@919a342809f9:/# cat /etc/os-release
在這裏插入圖片描述
退出容器:root@919a342809f9:/# exit

3. Docker運行CentOS

① 下載CentOS鏡像

[root@instance-mtfsf05r ~]# docker pull centos

② 查看CentOS鏡像

[root@instance-mtfsf05r ~]# docker images

③運行一個交互式的容器

docker run -it centosdocker run -it centos /bin/bash

如果沒有下載鏡像使用這條命令後會自動下載CentOS鏡像

④查看CentOS版本信息

[root@e5b3b931b3d1 /]# cat /etc/os-release

⑤ 在CentOS中安裝vim

[root@e5b3b931b3d1 /]# yum install vim

⑥ 查看CentOS中的進程

[root@0920c89974cf /]# ps -ef

⑦ 使用CentOS自帶Python解釋器運行Python腳本

[root@0920c89974cf /]# vim hello_docker.py

[root@0920c89974cf /]# python hello_docker.py Hello Docker!

控制檯:Hello Docker!

⑧ 後臺模式啓動Docker

[root@instance-mtfsf05r ~]# docker run centos

執行這個指令運行容器後“立刻”就退出了,Docker容器中必須要有後臺進程在運行着,才能保證Docker不會掛掉。
Docker提供的-d參數:後臺運行容器,返回容器ID

[root@instance-mtfsf05r ~]# docker run -d centos /bin/sh -c ‘while true;do echo hello centos!;sleep 1;done’
在這裏插入圖片描述
⑨ 進入容器
查看正在運行的容器:[root@instance-mtfsf05r ~]# docker ps

進入容器:[root@instance-mtfsf05r ~]# docker exec -it 30025944a231 /bin/bash

⑩ 查看容器正在運行產生的日誌

[root@instance-mtfsf05r ~]# docker logs 5de(5de是容器ID前三位)

[root@instance-mtfsf05r ~]# docker logs 5de -f

PS:啓動容器:[root@instance-mtfsf05r ~]# docker start 5de

停止容器:[root@instance-mtfsf05r ~]# docker stop 5de

刪除容器:[root@instance-mtfsf05r ~]# docker rm 5de

4. 容器的刪除

① 刪除沒有運行的容器

使用[root@instance-mtfsf05r ~]# docker rm docker ps -aq(docker ps -aq需要加反引號,編輯器的原因沒有顯示)只可以移除沒有運行的容器。

② 刪除所有容器
如果想強制移除所有容器,需要使用:[root@instance-mtfsf05r ~]# docker rm -f docker ps -aq,危險命令,不建議使用。

③ 合理性刪除容器
對於正在運行的容器:[root@instance-mtfsf05r ~]# docker ps或:

[root@instance-mtfsf05r ~]# docker container ls(查看正在運行的容器)

可以先停止容器的運行:[root@instance-mtfsf05r ~]# docker stop 300(300是容器ID)

然後刪除所有容器:[root@instance-mtfsf05r ~]# docker rm docker ps -aq

5. 提交自定義創建的鏡像

① 進入交互式CentOS容器中

[root@instance-mtfsf05r ~]# docker run -it centos

② 在CentOS容器中安裝vim

安裝:[root@71b84d6cfc20 /]# yum install vim -y

退出容器:[root@71b84d6cfc20 /]# exit

③ 查看安裝好的vim的容器記錄

[root@instance-mtfsf05r ~]# docker container ls -a[root@instance-mtfsf05r ~]# docker ps -a

④ 提交容器創建新的鏡像

[root@instance-mtfsf05r ~]# docker commit f23e390f54d2 thanlon/centos-vim

[root@instance-mtfsf05r ~]# docker images

⑤ 運行新創建的容器

[root@instance-mtfsf05r ~]# docker run -it thanlon/centos-vim或:

[root@instance-mtfsf05r ~]# docker run -it a9f(a9f是鏡像ID)

查看鏡像中是否有安裝vim:[root@d90d346a47f3 /]# vim

6. 外部訪問容器(一)

① 外部訪問容器的大體過程
Docker運行一個Web應用,通過端口映射,用戶通過瀏覽器可以訪問Docker中的web應用。

②運行一個Python Web應用

容器中可以運行網絡應用,但是想要讓外部訪問這些應用,可以通過-p或-P參數指定端口映射。

[root@instance-mtfsf05r ~]# docker run -d -P training/webapp python app.py

-d: 後臺運行容器

-P:隨機映射端口到容器開放的網絡端口

-p:可以通過-p參數指定映射端口,如:(訪問宿主機的9000端口其實是訪問Docker容器的5000端口)

[root@instance-mtfsf05r ~]# docker run -d -p 4000:5000 training/webapp python app.py

③ 查看容器內的端口映射狀態

[root@instance-mtfsf05r ~]# docker port 47e(“47e是端口號前三位”)
在這裏插入圖片描述
也可以使用docker ps查看到端口映射狀態。

7. 外部訪問容器(二)

示例:Docker運行Flask Web應用,外部訪問這個容器中的應用

① 運行CentOS鏡像

[root@instance-mtfsf05r ~]# docker run -it centos

② 在容器中easy_install模塊

[root@09a475fade35 /]# yum install python-setuptools -y

③ 安裝Flask模塊

[root@09a475fade35 /]# easy_install flask

檢驗是否安裝成功:import flask

[root@2471dd89bbc1 /]# python

Python 2.7.5 (default, Oct 30 2018, 23:45:53)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import flask
>>>

④ 寫一個Flask Web腳本

在home目錄下新建Flask腳本文件 flask-web.py:

[root@2471dd89bbc1 /]# cd home

[root@2471dd89bbc1 home]# ls

[root@2471dd89bbc1 home]# touch flask-web.py

需要用到vim,安裝vim:

[root@2471dd89bbc1 home]# yum install vim -y

[root@2471dd89bbc1 home]# vim flask-web.py

flask-web.py:

from flask import Flask
app= Flask(__name__)

@app.route('/')
def index():
        return 'Flask Application!'

if __name__ == '__main__':
        app.run(host = '0.0.0.0',port = 5000)

運行這個腳本文件,檢驗是否有誤:

[root@2471dd89bbc1 home]# python flask-web.py
在這裏插入圖片描述
⑤ 退出容器,產生容器記錄

[root@2471dd89bbc1 home]# exit

⑥ 提交容器記錄構建鏡像

[root@instance-mtfsf05r ~]# docker commit 2471dd89bbc1 test/flask_web

查看鏡像:[root@instance-mtfsf05r ~]# docker image ls
在這裏插入圖片描述
⑦ 運行鏡像產生容器

使用:[root@instance-mtfsf05r ~]# docker run -d -p 7000:5000 test/flask_web是沒有動作的,需要運行腳本,使容器持續運行:

[root@instance-mtfsf05r ~]# docker run -d -p 7000:5000 test/flask_web python /home/flask-web.py

“7000”是主機(我這裏是雲主機)端口,“5000”是Docker中容器中的應用端口。外部訪問宿主主機“7000”端口也就是訪問Docker中5000端口對應的Docker應用。

⑧ 訪問容器中的應用
在你的瀏覽器中輸入:106.12.115.123:7000/(主機IP+端口號)就會訪問到雲主機中的Flask Web應用:
在這裏插入圖片描述

8. 發佈docker鏡像到Docke Hub公有倉庫

① 註冊登錄Docker Hub

Docker Hub網址:https://hub.docker.com/

② 修改tag

博主的Daoker Hub賬號是Thanlon,先查看將要發佈的鏡像:

[root@instance-mtfsf05r ~]# docker images
在這裏插入圖片描述
鏡像名是:test/flask_web
push到Daoker Hub的命令格式是:docker push 賬號/倉庫名,爲了使鏡像名與"賬號/倉庫名"對應,需要修改tag:

[root@instance-mtfsf05r ~]# docker tag test/flask_web thanlon/flask-web

其過程就是建立一個鏡像的副本,並修改鏡像名,可以再次查看鏡像:

[root@instance-mtfsf05r ~]# docker images
在這裏插入圖片描述
很明顯鏡像列表中增加了thanlon/flask-web的鏡像。

③ push鏡像到Docker Hub中

[root@instance-mtfsf05r ~]# docker push thanlon/flask-web
在這裏插入圖片描述
④ 查看Daoker Hub倉庫
在這裏插入圖片描述

9. Docker搭建私有倉庫

① 下載Docker私有倉庫鏡像

[root@instance-mtfsf05r ~]# docker pull registry

② 啓動私有倉庫容器實例

[root@instance-mtfsf05r ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry

私有倉庫會被創建在容器中的/var/lib/registry下,通過-v參數將鏡像文件存儲到本地的/opt/data/registry下,容器中的5000端口映射到宿主的5000端口。

③ 查看私有倉庫的容器運行狀態

[root@instance-mtfsf05r ~]# docker ps

④ 修改本地鏡像的tag

修改本地鏡像的tag,便於推送到本地鏡像倉庫:

[root@instance-mtfsf05r ~]# docker tag registry 106.12.115.123:5000/registry

⑤ 測試容器的連接是否正常

[root@instance-mtfsf05r ~]# telnet 106.12.115.136 5000
在這裏插入圖片描述
⑥ 使Docker允許HTTPS方式push鏡像

通過Docker的配置選項來取消不允許非HTTPS方式推送鏡像這個默認規則,修改配置文件/etc/docker/daemon.json

[root@instance-mtfsf05r ~]# vim /etc/docker/daemon.json

修改爲:

{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"insecure-registries":["106.12.115.136:500"]
}

修改Docker服務配置文件,寫入以下內容:

EnvironmentFile=/etc/docker/daemon.json

在這裏插入圖片描述
注意要寫入 [Serveice] 配置塊中,加載配置文件(daemon.json)。

⑦ 重新加載docker

[root@instance-mtfsf05r ~]# systemctl daemon-reload

⑧ 重啓Docker服務

[root@instance-mtfsf05r ~]# systemctl restart docker

⑨ 開啓私有倉庫的容器實例

由於重啓了Docker,所有容器鏡像實例全部被關閉,所以需要開啓私有倉庫的容器實例。
查看私有倉庫的容器記錄:

[root@instance-mtfsf05r ~]# docker ps -a

啓動容器實例:

[root@instance-mtfsf05r ~]# docker start 2522102623c2(2522102623c2是容器ID)

⑩ 推送本地鏡像到私有倉庫

[root@instance-mtfsf05r ~]# docker push 106.12.115.123:5000/hello-world

PS:
查看推送到私有倉庫中的鏡像:http://106.12.115.123:5000/v2/

從私有倉庫中下載鏡像:[root@instance-mtfsf05r ~]# docker pull 106.12.115.136:5000/hello-world

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章