前言
作為一個(gè)苦逼Windows用戶, Docker和Virtualbox只能二選一. 所以之前就一直沒怎么用過Docker. 但最近因工作需要不得不用docker, 只好惡補(bǔ)一下, 順便做個(gè)筆記, 把自己學(xué)習(xí)過程中的一些理解記錄下來
常用命令
下載鏡像
docker pull <image_name>
列出鏡像
docker images
docker image ls
刪除鏡像
docker rmi <image_name/image_id>
運(yùn)行容器
docker run -it <image_name/image_id> <params>
-i ,interactive, 交互式操作
-t ,terminal 創(chuàng)建一個(gè)偽終端
-i 和 -t一般連用, 不用-i的話不能進(jìn)行交互(比如用不了vi這些交互式命令)
-d ,daemon 后臺(tái)運(yùn)行
--rm, 停止后自動(dòng)刪除容器, 不需要再去docker ps -a&&docker rm了
-v <path>:<path>, volume 共享文件夾
-p <host_port>:<container_port>, port 映射端口
-P, Ports 映射全部端口
--privileged, 用特權(quán)方式運(yùn)行容器. 可以簡(jiǎn)單理解為Windows下的以管理員權(quán)限運(yùn)行, linux下的sudo, 一般涉及到宿主機(jī)硬件或者系統(tǒng)文件的時(shí)候才需要用到
--net "bridge", 指定容器的網(wǎng)絡(luò)連接類型
bridge, 創(chuàng)建獨(dú)立的網(wǎng)絡(luò)棧,保證容器內(nèi)的進(jìn)程組使用獨(dú)立的網(wǎng)絡(luò)環(huán)境,實(shí)現(xiàn)容器間、容器與宿主機(jī)之間的網(wǎng)絡(luò)棧隔離。另外,Docker通過宿主機(jī)上的網(wǎng)橋(docker0)來連通容器內(nèi)部的網(wǎng)絡(luò)棧與宿主機(jī)的網(wǎng)絡(luò)棧,實(shí)現(xiàn)容器與宿主機(jī)乃至外界的網(wǎng)絡(luò)通信
host, 容器將不會(huì)虛擬出自己的網(wǎng)卡,配置自己的IP等,而是使用宿主機(jī)的IP和端口
none, 容器創(chuàng)建后沒有網(wǎng)卡、IP、路由等信息。需要手動(dòng)添加網(wǎng)卡、配置IP
container, 指定新創(chuàng)建的容器和已經(jīng)存在的一個(gè)容器共享一個(gè)Network Namespace,而不是和宿主機(jī)共享
--name "container_name", 自定義一個(gè)容器名稱, 方便后面使用
-h "<hostname>", host 指定容器的hostname
--dns <dns_server>, 指定容器的dns服務(wù)器
列出容器
列出當(dāng)前運(yùn)行的容器
docker ps
列出所有創(chuàng)建的容器(包含已關(guān)閉但未刪除的容器)
docker ps -a
關(guān)閉容器
docker stop <container_id/container_name>
刪除容器
docker rm <container_id/container_name>
重啟容器
docker restart <container_id/container_name>
進(jìn)入后臺(tái)容器
docker attach <container_id/container_name>
在容器內(nèi)執(zhí)行
docker exec --it <container_id/container_name> <command>
如要在名稱為lzskyline的容器中開啟一個(gè)bash, 可使用:
docker exec --it lzskyline bash
退出exec啟動(dòng)的程序不會(huì)影響容器的停止
構(gòu)建鏡像
根據(jù)dockerfile創(chuàng)建鏡像文件
docker build -t <image_name> <image_path>
常用快捷鍵
容器內(nèi)關(guān)閉退出: Ctrl + D
容器內(nèi)關(guān)閉不退出: Ctrl+P+Q
dockerfile部分
- 如果別人的鏡像用的不爽但是又沒有對(duì)方的dockerfile文件時(shí)可以用FROM的方式繼承鏡像內(nèi)容, 再使用RUN執(zhí)行命令二次修改
常見問題
-
docker容器運(yùn)行后自動(dòng)退出, 加了-itd不起作用
原因:
image的ENTRYPOINT可能設(shè)置為了一個(gè)非掛起的程序, 比如在dockerfile里面指定了ENTRYPOINT ["ls"]. 這樣就是會(huì)自動(dòng)退出的
解決方案:
有dockerfile的話就修改一下, 改為ENTRYPOINT ["bash"]之類的即可.
沒有dockerfile的話可以用FROM的方式繼承源鏡像, 再在下面加上ENTRYPOINT ["bash"], 可以覆蓋掉原來的ENTRYPOINT.
dockerfile改好之后
PS
現(xiàn)在還有很多docker的功能沒有使用到, 后續(xù)摸索完之后會(huì)繼續(xù)補(bǔ)充, 目前計(jì)劃的有
- dockerfile的相關(guān)語法
- 更新鏡像(類似保存快照)
內(nèi)容若有錯(cuò)誤之處還請(qǐng)留言斧正 _
博客文章遷移: 2019-11-22 16:21