1. 程式人生 > >Docker容器從一知半解到入門

Docker容器從一知半解到入門

Docker是一個開源的、跨平臺的應用容器引擎,可以讓技術開發認用打包他們的應用以及一些依賴包到一個可移植的容器平臺中,釋出到任何流行的Linux作業系統上面,也可以在Windows和mac作業系統上面跑,容器是完全使用沙箱機制,容器相互之間不會存在任何介面。docker應用廣泛、安全性好、執行快、節約資源、移植性好、自動化部署快等有點。

下面我們來看一張docker映象基本原處理圖:

 

我們在學習Docker映象的時候,使用系統預設的yum源安裝會非常慢,很有可能會安裝失敗,因為docker伺服器在國外,訪問速度非常慢,訪問網路也不穩定,而且國外的docker hub官網拉取映象也太慢了,我們可以直接修改用國內的阿里的容器Hub服務 

https://cr.console.aliyun.com的控制檯,這裡需要登入阿里賬號或者支付寶賬號,也可以使用騰訊雲、百度雲、華為雲、ucloud、網易雲等都有docker映象hub,我這裡使用的阿里雲映象服務;在學習docker容器的前提下還是要對Linux要有點基礎,這樣學起來就容易上手,如果完全不懂Linux,還是建議你去學習下Linux就該這麼學》這邊教程裡面的內容非常詳細,比較適合初學者。此文章比較適合於企業應用。

1、Centos 7 install docker-ce

安裝指定版本的Docker-CE:

# Step 1: 查詢Docker-CE的版本:

# yum list docker-ce.x86_64 --showduplicates | sort -r

 * updates: mirrors.aliyun.com

Loading mirror speeds from cached hostfile

Loaded plugins: fastestmirror

Installed Packages

 * extras: mirrors.aliyun.com

 * epel: mirrors.ustc.edu.cn

docker-ce.x86_64            3:18.09.0-3.el7                      docker-ce-stable

docker-ce.x86_64            3:18.09.0-3.el7                       @docker-ce-stable

docker-ce.x86_64            18.06.1.ce-3.el7                 docker-ce-stable

docker-ce.x86_64            18.06.0.ce-3.el7                    docker-ce-stable

docker-ce.x86_64            18.03.1.ce-1.el7.centos            docker-ce-stable

docker-ce.x86_64            18.03.0.ce-1.el7.centos            docker-ce-stable

docker-ce.x86_64            17.12.1.ce-1.el7.centos            docker-ce-stable

docker-ce.x86_64            17.12.0.ce-1.el7.centos            docker-ce-stable

docker-ce.x86_64            17.09.1.ce-1.el7.centos            docker-ce-stable

docker-ce.x86_64            17.09.0.ce-1.el7.centos            docker-ce-stable

docker-ce.x86_64            17.06.2.ce-1.el7.centos            docker-ce-stable

docker-ce.x86_64            17.06.1.ce-1.el7.centos            docker-ce-stable

docker-ce.x86_64            17.06.0.ce-1.el7.centos            docker-ce-stable

docker-ce.x86_64            17.03.3.ce-1.el7                    docker-ce-stable

docker-ce.x86_64            17.03.2.ce-1.el7.centos            docker-ce-stable

docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable

docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable

 * base: mirrors.cqu.edu.cn

Available Packages

# Step2: 安裝指定版本的Docker-CE

# sudo yum -y install docker-ce-[VERSION]

安裝最新版本的Docker-CE:

# step 1: 安裝必要的一些系統工具

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

# Step 2: 新增軟體源資訊

 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Step 3: 更新並安裝Docker-CE

yum makecache fast

yum -y install docker-ce

# Step 4: 開啟Docker服務

systemctl start docker.service

Step 5: 檢視Docker安裝版本

docker --version

Docker version 18.09.0, build 4d60db4

2、docker安裝目錄結構

 

3、啟動和停止映象

3.1、啟動容器

自定義映象名:便於區分

-d 後臺執行

 

 

指定主機啟動的名稱

[[email protected] ~]# docker run -itd -h hostname 映象

 

舉例:

[[email protected] ~]# docker run -itd docker.io/ubuntu /bin/bash

[email protected]:/#

 

3.2、停止/退出,docker退出容器,並且關閉容器

exit

 

docker退出容器,而不關閉容器:

ctrl+p    ctrl+q   //這裡2個步驟

 

ctrl+p+q   

 

3.3、docker 給執行的容器對映本地埠

[[email protected] ~]# docker run -itd -p 0.0.0.0:80:80 --name apache docker.io/ubuntu /bin/bash

 

4、docker常用命令及解釋如下

docker search nginx   //搜尋映象庫

docker pull nginx   //選擇合適的映象並拉取映象

docker images nginx   //在本地映象列表裡查到 REPOSITORY 為 nginx 的映象

docker images httpd   //在本地映象列表裡查到 REPOSITORY 為apache的映象

docker info    //檢視docker資訊

docker version    //檢視docker版本

docker pull 映象名稱   //下載(拉)映象

docker push 映象名稱   //上傳映象

docker load -i 映象名稱.tar  //匯入映象

docker images    //檢視所有已經安裝的映象列表

docker attach 映象名/映象ID  //進入映象裡面

docker exec 映象名/映象ID ls /home //在執行shell命令到容器裡面

 

舉例:a.txt b.txt是我開始建立的2個文字檔案

[[email protected] ~]# docker exec elegant_bhaskara ls /home

a.txt

b.txt

 

 

[[email protected] ~]# docker stop 映象名/映象ID //停止映象

 

[[email protected] ~]# docker tag 原映象名 新映象名  //生成新的images

舉例:docker tag docker.io/ubuntu ubuntu:laste

 

 

[[email protected] ~]#  docker run -it test:ubuntu /bin/bash

 

 

[[email protected] ~]#  docker commit hopeful_carson(NAMES) ubuntu(REPOSITORY):self(tag)  //提交映象,生成新的映象,映象裡面的配置也保留了,便於多個版本的管理

 

 

[[email protected] ~]# docker run -itd --name test01_self ubuntu:self  用提交的映象再啟動新的映象

0f280fd95659c81fcff4069bb53ff53b07d06b28de05111dd5a9177e16865f22

 

 [[email protected] ~]# docker exec test01_self ls /home

 

 

5、提交執行中的容器為一個映象   (這樣不會丟失在容器的各種操作)

 

[[email protected] ~]# docker commit clever_haibt clever_haibt_new

 

###   clever_haibt(執行容器名稱)    clever_haibt_new(生成映象名稱)

 

6、執行映象並新增埠

[[email protected] ~]# docker run -d -it -p 80:80 clever_haibt_new:latest /bin/bash

###  小p是自定義埠    latest 是映象的標籤(最好寫上專業點)

 

舉例apache:httpd:latest

# docker run -d -it -p 80:80 httpd:latest

 

 

測試:http://ip

7、列出執行的映象

[[email protected] ~]# docker ps //檢視已執行的容器狀態

 

 

檢視映象、容器、資料卷所佔用的空間

[[email protected] ~]# docker system df

 

8、Docker本身提供了兩種終止容器執行的方式,檢視幫助

[[email protected] ~]# docker stop --help

舉例:docker stop NAMES

 

 

docker kill --help

 

9、linux下解決docker埠對映到宿主機後外網無法訪問的問題?

解決辦法:

[[email protected] ~]# vim /etc/sysctl.conf

或者

[[email protected] ~]# vim /usr/lib/sysctl.d/00-system.conf

新增如下程式碼:

net.ipv4.ip_forward=1

重啟network服務

# systemctl restart network

檢視是否修改成功

# sysctl net.ipv4.ip_forward  

如果返回為“net.ipv4.ip_forward = 1”

則表示成功了

 

10、刪除映象

先停止映象--再執行刪除操作

 

[[email protected] ~]# docker rm 映象名稱/容器ID

 

[[email protected] ~]# docker rm -f 映象名稱/容器ID  //強制刪除映象

 

11、匯出映象,生成tar包,export匯出的是讀寫層的檔案系統

[[email protected] ~]# docker export 映象名/映象ID > XXXX.tar

 

舉例:

[[email protected] ~]# docker export test01_self > test01.tar

 

 

匯出完整映象:save:匯出映象所有檔案和歷史紀錄

[[email protected] ~]# docker save docker.io/imagine10255/centos6-lnmp-php56 > lnmp.tar

 

 

12、匯入映象

[[email protected] ~]# docker import test01.tar(映象包) ubuntu:self_new(新的映象名)

 

 

13、啟動匯入的映象

[[email protected] ~]# docker run -itd --name ubuntu_self_new ubuntu:self_new /bin/bash

 

 

打包前建立的檔案存在

 

 

匯入完整映象: load

[[email protected] ~]# docker rmi docker.io/imagine10255/centos6-lnmp-php56  //刪除

 

[[email protected] ~]# docker load -i lnmp.tar  //重新匯入