docker容器

容器(containe)是鏡像的運行時實例.

容器

如果鏡像是一個模版,那么容器(containe)就是鏡像的運行時實例.

為什么要使用容器

與傳統(tǒng)的虛擬機相比,容器有如下優(yōu)勢

  • 容器共享主機的資源, 更加輕巧.
  • 容器可以根據(jù)需要加載必需的庫、依賴項和文件.
  • 容器可以更好在生產(chǎn)環(huán)境進(jìn)行遷移.

啟動容器

使用docker run -option image:tag command命令 command參數(shù)來啟動一個容器, 如:

docker run -it mysql /bin/echo hello world!

上述命令會啟動一個容器并輸出


啟動容器

option可選列表如下

  • -d 容器在后臺以domain模式運行,返回容器id
  • -i 以交互模式運行 通常與 -t一起使用
  • -P 容器內(nèi)部端口隨機映射到主機端口
  • -p 指定端口映射 格式 主機端口:容器端口
  • -t: 為容器重新分配一個偽輸入終端m,通常與-i同時使用 -it一起使用可以將當(dāng)前終端連接到容器終端
  • --name="newname"" 為容器指定一個名稱
  • --dns 指定容器DNS,默認(rèn)與宿主一致
  • --dns-search example.com 指定容器DNS搜索域名,默認(rèn)和宿主一致
  • -h 指定容器的hostname
  • -e key=value 設(shè)置環(huán)境變量
  • --env-file=[] 從指定文件讀取環(huán)境變量
  • --cpuset="0-2" or --cpuset="0,1,2" 綁定容器到指定CPU運行
  • -m 設(shè)定容器最大內(nèi)存
  • --net="bridge" 指定容器的網(wǎng)絡(luò)連接類型,支持bridge/host/none/container四種類型
  • --link=[] 添加鏈接到另一個容器
  • --expose=[] 開放一個端口或一組端口
  • --volume,-v 綁定一個卷

與容器交互

使用-it參數(shù)可以啟動一個偽終端

docker run -it test:v1
-it開啟偽終端

容器后臺運行

容器會在執(zhí)行完成command或者退出bash后終止,使用-d參數(shù)可以指定容器后臺運行,此處用mysql鏡像啟動一個容器

docker run -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

成功啟動后會返回這個容器的id

防止容器退出

docker容器同時只能管理一個進(jìn)程,如果這個進(jìn)程退出那么容器也就退出了.例子

docker run -it --name test1 centos:latest /bin/sh

啟動一個名為test1的centos鏡像,然后輸出exit并回車,然后docker ps -a發(fā)現(xiàn)這個容器已經(jīng)退出

628d9bded677   centos:latest   "/bin/sh"   7 seconds ago   Exited (0) 4 seconds ago             test1

exit命令結(jié)束了docker管理的/bin/sh進(jìn)程,因而無論是否這個容器中有沒有其他進(jìn)程在后臺運行,容器都會退出.

換句話說,docker run指定的容器啟動時運行的程序結(jié)束,那么容器就會退出.

如何避免呢,可以在執(zhí)行上述命令后,按CTRL+P+Q切出,此時容器并不會退出.

docker run -it --name test1 centos:latest /bin/sh

然后按CTRL+P+Q切出,再查看.

b30c4510a76c   centos:latest   "/bin/sh"   1 minutes ago   Up 1 minutes                         test1

查看容器運行狀態(tài)

使用docker ps或者docker container ls命令查看運行狀態(tài),與linuxps 命令非常相似

ps

這里docker ps的命令包括:

  • -a 列出所有容器
  • -l 列出最新創(chuàng)建容器
  • -n=2 列出最近創(chuàng)建的2個容器
  • -q 僅列出容器ID
  • -s 顯示容器大小

如果要查看所有容器,使用docker ps -a

ps -a

查款容器日志

使用docker logs container_id|name命令來查看容器日志.

容器重命名

在創(chuàng)建一個容器的時候,docker后自動對其進(jìn)行重命名,也可以使用--name來指定,以mysql為例

docker run -e MYSQL_ROOT_PASSWORD=123456 --name mysql_server -d mysql:5.6
--name 重命名容器

登陸到容器

-d指定容器后臺運行后,可以使用兩種方式登陸到容器.

  • docker attach container_id 不推薦,退出會導(dǎo)致容器停止運行.
  • docker exec 推薦
 docker exec -it mysql_server /bin/bash
exec

檢視容器

使用docker inspect container_id|container_name命令來查看檢視容器,通常會包含一些非常有用的信息

docker inspect mysql_server
檢視容器信息

設(shè)置容器端口

啟動mysql后,可以使用-p 宿主端口:容器端口參數(shù)映射容器端口與宿主機端口,宿主端口和容器端口設(shè)置成不一樣的只
比如12345:54321表示宿主的12345端口映射到容器的54321端口.

上面已經(jīng)啟動了一個mysql容器,容器中mysql進(jìn)程監(jiān)聽的是容器的3306端口,由于沒有指定端口映射,在宿主機是無法訪問容器中的mysql.

如果想要外部訪問,啟動一個新的mysql容器并綁定到宿主機的3306端口.

docker run -e MYSQL_ROOT_PASSWORD=123456 --name mysql_server_new -p 3306:3306 -d mysql:5.6

設(shè)置端口映射

可以使用docker port container_id/name來查看一下容器的端口映射

docker port mysql_server_new

3306/tcp -> 0.0.0.0:3306

還可以使用docker ps,可以看到PORTS顯示 3306->3306,測試一下

宿主機連接mysql

注:此處表述有誤,無法訪問并不是完全無法訪問,使用iptable工具映射過去也可以,比較麻煩而已.

關(guān)閉容器

使用docker container start/stop/restart container_id來啟動或停止一個容器

除此之外,還可以使用docker -kill container_id 來強行停止一個容器

刪除容器

使用docker rm container_i來刪除一個容器,下面id為226db43edaedab3d300443cd的容器.

delete

導(dǎo)入導(dǎo)出

使用docker export container_id > localfile導(dǎo)出容器快照為本地文件.

docker export mysql_server_new > mysql.tar

使用docker import file/url image_name:tag來將一個容器快照導(dǎo)入為本地快照

docker import mysql.tar mysql_import_test:v1

import

mysql容器的快照被導(dǎo)入成了一個本地鏡像.

可以使用docker commit命令將本地容器快照導(dǎo)出為一個本地鏡像

docker commit -a "zhangsheng" -m "mysql image" mysql_server_new test_mysql:v11111

commit

commit參數(shù)如下

  • -a :提交的鏡像作者
  • -c :使用Dockerfile指令來創(chuàng)建鏡像
  • -m :提交時的說明文字
  • -p :在commit時,將容器暫停
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容