轉載自 https://blog.csdn.net/yx_222/article/details/80936757
本文主要介紹在Ubuntu16.04 LTS 64位系統下通過apt的Docker官方源安裝最新的Docker CE(Community Edition),即Docker社區版的步驟。
Docker安裝
- 卸載可能存在舊版本的docker:
$ sudo apt-get remove docker docker-engine docker-ce docker.io
- 更新apt包索引:
$ sudo apt-get update
爲了使apt可以通過https使用Repository,先安裝以下包:
$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
添加Docker官方GPG密鑰:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
檢查GPG Key信息是否正確:
$ sudo apt-key fingerprint 0EBFCD88
GPG Key信息如下:
pub 4096R/0EBFCD88 2017-02-22
Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid Docker Release (CE deb) <[email protected]>
sub 4096R/F273FCD8 2017-02-22
添加源信息:
# 將源信息直接寫入/etc/apt/sources.list
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
或者
#單獨創建docker的source.list
$ sudo bash -c "deb [arch=amd64] https://download.docker.com/linux/ubuntu trusty stable > /etc/apt/sources.list.d/docker.list"
再更新下apt包索引:
$ sudo apt-get update
確認Docker的源信息是否正確, 新的源是否添加成功:
$ sudo apt-cache madison docker-ce
- 安裝最新版本的Docker CE:
$ sudo apt-get install -y docker-ce
- 如果需要安裝某個指定版本的Docker CE,而不是最新版本,可用下面命令列出可用的版本列表信息:
$ sudo apt-cache madison docker-ce
第一列是包名,第二列是版本字符串,第三列是存儲庫名稱,它標識出包來自哪個存儲庫,以及擴展它的穩定性級別。通一下命令安裝指定版本的包:
$ sudo apt-get install docker-ce=[版本字符串]
Docker安裝驗證
$ sudo docker -v
- 查看Docker安裝版本詳細信息:
$ sudo docker version
啓動Docker
- 查看docker服務是否啓動:
$ sudo systemctl status docker
- 如果Docker未啓動,則啓動Docker:
$ sudo systemctl start docke
- 運行Hello World,校驗Docker是否安裝成功:
$ sudo docker run hello-world
運行這個命令會下載一個hello-world的鏡像, 並且運行在一個容器中。該容器運行時會有如下輸出:
Docker開啓遠程訪問
默認情況下,Docker守護進程會生成一個socket(/var/run/docker.sock)文件來進行本地進程通信,而不會監聽任何端口,因此只能在本地使用docker客戶端或者使用Docker API進行操作。 如果想在其他主機上操作Docker主機,就需要讓Docker守護進程監聽一個端口,這樣才能實現遠程通信。
方法一:臨時啓動遠程訪問和本地訪問(親測未能成功開啓Docker遠程訪問)
- 執行以下命令:
$ sudo dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock &
方法二:永久開啓遠程訪問和本地訪問(親測未能成功開啓Docker遠程訪問)
- 修改Docker服務啓動配置文件,添加一個未被佔用的端口號:
Docker服務啓動配置文件位置:
Ubuntu位置:/etc/default/docker
Centos位置:/etc/sysconfig/docker
修改啓動配置文件,如下:
# 開啓遠程訪問 -H tcp://0.0.0.0:2375 # 開啓本地套接字訪問 -H unix:///var/run/docker.sock DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
- 重啓Docker
$ sudo systemctl restart docker
方法三:永久開啓遠程訪問和本地訪問(親測有效)
外部鏈接地址:點擊打開鏈接
- 進入/etc/systemd/system/目錄
$ sudo cd /etc/systemd/system/
- 查找docker.service文件
# 在/etc/systemd/system目錄下查找docker.service文件
$sudo find /etc/systemd/system -name docker.service
- 打開docker.service文件
vim docker.service
註釋掉:ExecStart=/usr/bin/dockerd -H fd://
添加:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
保存Docker.service文件
- 刷新配置
$ sudo systemctl daemon-reload
- 重新啓動Docker守護進程
$ sudo systemctl restart docker
- 確認是否重啓成功
$ sudo ps -ef | grep docker
or
$ sudo ps -A|grep docker
測試Docker遠程通訊是否成功開啓
- Docker客戶端校驗
瀏覽器訪問:http://Docker服務器IP:2375/info
- Docker服務器校驗遠程訪問
docker -H tcp://localhost:2375 images
或
docker -H tcp://127.0.0.1:2375 images
或
docker -H tcp://Docker服務器IP:2375 images
- Docker服務器校驗本地訪問
docker info
戶機添加Docker環境變量
DOCKER_HOST=tcp://Docker服務器IP:2375
Docker基本用法(常用命令)
Docker鏡像常用命令
- 搜索鏡像
可以使用docker search命令搜索存放在Docker Hub中的鏡像,例如:
$ sudo docker search java
執行該命令後,Docker就會在Docker Hub中搜索含有java這個關鍵詞的鏡像倉庫。執行該命令後可以看到類似於如下的表格:
該表格包含五列,含義如下:
- NAME:鏡像倉庫名稱。
- DESCRIPTION:鏡像倉庫描述。
- STARS:鏡像收藏數,表示該鏡像倉庫的受歡迎程度,類似於GitHub的Stars。
- OFFICAL:表示是否爲官方倉庫,該列標記爲[OK]的鏡像均由個軟件的官方項目組創建和維護。由結果可知,java這個鏡像倉庫是官方倉庫,而其他倉庫都不是官方鏡像倉庫。
- AUTOMATED:表示是否爲自動構建鏡像倉庫。
- 下載鏡像
使用docker pull命令即可從Docker Registry上下載鏡像,例如:
$ sudo docker pull java
執行該命令後,Docker會從Docker Hub中的java倉庫下載最新版本的java鏡像。若鏡像下載緩慢,可配置鏡像加速器。
該命令還可指定想要下載的鏡像標籤以及Docker Registry地址,例如:
$ sudo docker pull reg.itmuch.com/java:7
這樣就可以從指定的Docker Registry中下載標籤爲7的Java鏡像。
- 列出本地鏡像
使用docker images命令即可列出一下載的本地鏡像列表。
執行該命令後,將會看到類似於如下表格:
該表格包含了5列,含義如下:
- REPOSITORY:鏡像所屬倉庫名稱
- TAG:鏡像標籤。默認是latest,表示最新。
- IMAGE ID:鏡像ID,表示鏡像唯一標標識
- CREATED:鏡像創建時間
- SIZE:鏡像大小
- 刪除本地鏡像
使用docker rmi命令即可刪除指定鏡像
例1:刪除指定名稱的鏡像
$ sudo docker rmi hello-world
表示刪除hello-world這個鏡像
例2:刪除所有鏡像
$ sudo docker rmi -f $(docker images)
-f 參數表示強制刪除
Docker容器常用命令
- 新建並啓動容器
使用docker run命令即可新建並啓動一個容器。
該命令是最常用命令,它有很挫選項,下面將列舉一些常用選項。
- d 選項:表示後臺運行
- P 選項:隨機端口映射
- p 選項:指定端口映射,有一下四種格式
- ip:hostPort:containerPort
- ip::containerPort
- hostPort:containerPort
- containerPort
- network 選項:指定網絡模式,該選項有一下可選參數:
- --network=bridge:默認選項,表示連接到默認的網橋。
- --network=host:容器使用宿主機的網絡。
- --network=container:NAME_or_ID:告訴Docker讓新建的容器使用已有容器的網絡配置。
- --network=none:不配置該容器的網絡,用戶可自定義網絡配置。
示例1:
$ sudo docker run java /bin/echo 'Hello World'
這樣終端會打印Hello World的字樣,跟在本地直接執行/bin/echo 'Hello World' 一樣。
示例2:
$ sudo docker run -d -p 91:80 nginx
這樣就能啓動一個Nginx容器。在本例中,爲docker run添加了兩個參數,含義如下:
-d # 後臺運行
-p 宿主機端口:容器端口 # 開放容器端口到宿主機端口
訪問http://Docker宿主機IP:91/將會看到如下界面:- 列出本地容器
使用docker ps命令即可列出運行中的本地容器,執行該命令後,可以看到類似與如下的表格:
如需要列所有容器(包括已停止的容器),可使用 -a 參數。
該表格包含了7列,含義如下:
- CONTAINER_ID:表示容器ID
- IMAGE:表示鏡像名稱
- COMMAND:表示啓動容器時運行的命令
- CREATED:表示容器創建時間
- STATUS:表示容器運行狀態。UP表示運行中,Exited表示已停止。
- PORTS:表示容器對外的端口號
- NAMES:表示容器名稱,該名稱默認由Docker自動生成,也可使用docker run命令的--name選項自定指定。
- 停止容器
使用docker stop命令,即可停止容器,例如:
$ sudo docker stop 2730ed88f8e5
其中 2730ed88f8e5 是容器ID,當然也可以使用 docker stop 容器名稱 來停止指定容器。
- 強制停止容器
可以使用docker kill 命令發送SINGKILL信號來強制停止容器。例如:
$ sudo docker kill 2730ed88f8e5
- 啓動已停止的容器
使用docker run命令,即可新建並啓動一個容器。對於已停止的容器,可以使用docker start命令來啓動。例如:
$ sudo docker start 2730ed88f8e5
- 重啓容器
可使用docker restart命令來重啓容器。該命令實際上是先執行了docker stop命令,然後再執行了docker start命令。
- 進入容器
使用docker attach命令進入容器。例如:
$ sudo docker attach 2730ed88f8e5
很多場景下,使用docker attach命令並不方便。當多個窗口同時attach到同一個容器時,所有窗口都會同步顯示。同理,如果某個窗口發生阻塞,其他窗口也無法執行操作。
可以使用nsenter進入容器。
nsenter工具包含在util-linux 2.23或更高版本中。爲了連接到容器,需要找到容器第一個進程的PID,可通過以下命令獲取:
$ sudo docker inspect --format "{{.State.Pid}}" $CONTAINER_ID
獲得PID後,就可使用nsenter命令進入容器了:
$ sudo nsenter --target "$PID" --mount --uts --ipc --net --pid
下面給出一個完整的例子:
也可將以上兩條命令封裝成一個Shell,從而簡化進入容器的過程。
- 刪除容器
使用docker rm命令即可刪除指定容器。
例1:刪除指定容器
$ sudo docker rm 2730ed88f8e5
該命令只能刪除已停止的容器,如需要刪除正在運行的容器,可使用-f參數。
例2:刪除所有容器
$ sudo docker rm -f $(docker ps -a -q)