容器與鏡像的區(qū)別
image鏡像
- Docker image是一個(gè)
read-only
文件,位于磁盤上 - 這個(gè)文件包含文件系統(tǒng),源碼,庫文件,依賴,工具等一些運(yùn)行application所需要的文件
- 可以理解成一個(gè)模板
- docker image具有分層的概念
container容器
- 一個(gè)運(yùn)行中的docker image,位于內(nèi)存中
- 實(shí)質(zhì)是復(fù)制image并在image最上層加上一層
read-write
的層(稱之為container layer,容器層) - 基于同一個(gè)image可以創(chuàng)建多個(gè)container
容器的基本操作
容器的基本操作都是命令docker container
開頭,大部分情況下可以簡(jiǎn)寫為docker
,例如docker container run
可以簡(jiǎn)寫為docker run
。
下面是docker container
開頭的命令列表:
$ docker container --help
Usage: docker container COMMAND
Manage containers
Commands:
attach Attach local standard input, output, and error streams to a running container
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
exec Run a command in a running container
export Export a container's filesystem as a tar archive
inspect Display detailed information on one or more containers
kill Kill one or more running containers
logs Fetch the logs of a container
ls List containers
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
prune Remove all stopped containers
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
run Run a command in a new container
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
wait Block until one or more containers stop, then print their exit codes
docker container create
docker container create
只是新建一個(gè)容器,并不啟動(dòng)一個(gè)容器。
$ docker container create --name nginx -p 8899:80 nginx
5932d5e624f7cced52fb8f9282a01c5a112fba249236d028733c424ec7099a6e
docker container run
docker container run
新建并啟動(dòng)一個(gè)容器。
$ docker container run -d --name nginx -p 8899:80 nginx
ee86be635d8b0ff99e36796191da4ee5c34241f37dc0f66c8b21e2a85517e9de
選項(xiàng):
- -d:表示以detach模式后臺(tái)運(yùn)行
- –name:為容器指定一個(gè)名字
- -p:端口映射,宿主機(jī)端口為8899映射到docker內(nèi)端口80
docker container ls
docker container ls
查看啟動(dòng)的容器,也可以簡(jiǎn)寫為docker ps
或者docker container ps
。
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee86be635d8b nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:8899->80/tcp, :::8899->80/tcp nginx
選項(xiàng):
- -a:列出所有的容器(包括正在運(yùn)行的和已停止運(yùn)行的)
- -l:顯示最近創(chuàng)建的容器
- -n:顯示最近創(chuàng)建的n個(gè)容器
- -q:只顯示容器ID
docker container stop
docker container stop
停止運(yùn)行中的容器,后面需要帶上容器的名稱或者ID,ID可以只寫前面幾位,不需要寫全,能根據(jù)ID前綴找到對(duì)應(yīng)的唯一的容器即可,其他帶ID的命令也類似。
$ docker container stop ee86be635d8b
ee86be635d8b
$ docker container stop nginx
nginx
$ docker container stop ee8
ee8
docker container start
docker container start
啟動(dòng)已停止的容器。
$ docker container start nginx
nginx
docker container restart
docker container restart
重啟運(yùn)行中的容器。
$ docker container restart nginx
nginx
docker container kill
docker container kill
強(qiáng)制停止運(yùn)行中的容器。
$ docker container kill nginx
nginx
docker container rm
docker container rm
可以刪除容器。
$ docker container rm nginx
nginx
如果容器的狀態(tài)是正在運(yùn)行中是不可以刪除的,此時(shí)可以加上-f
選項(xiàng)來強(qiáng)制刪除運(yùn)行中的容器。
docker container logs
docker container logs
可以用來查看容器的日志。
$ docker container logs -f nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
。。。。。。
如果要實(shí)時(shí)的日志,可以使用-f
選項(xiàng),類似于tail -f
命令。
docker container top
docker container top
可以用來查看容器內(nèi)的進(jìn)程情況,類似于top
命令。
$ docker container top nginx
UID PID PPID C STIME TTY TIME CMD
root 6083 6063 0 19:37 pts/0 00:00:00 nginx: master process nginx -g daemon off;
systemd+ 6144 6083 0 19:37 pts/0 00:00:00 nginx: worker process
systemd+ 6145 6083 0 19:37 pts/0 00:00:00 nginx: worker process
systemd+ 6146 6083 0 19:37 pts/0 00:00:00 nginx: worker process
systemd+ 6147 6083 0 19:37 pts/0 00:00:00 nginx: worker process
systemd+ 6148 6083 0 19:37 pts/0 00:00:00 nginx: worker process
systemd+ 6149 6083 0 19:37 pts/0 00:00:00 nginx: worker process
systemd+ 6150 6083 0 19:37 pts/0 00:00:00 nginx: worker process
systemd+ 6151 6083 0 19:37 pts/0 00:00:00 nginx: worker process
docker container inspect
docker container inspect
查看容器的詳細(xì)信息,如鏡像信息、環(huán)境變量、網(wǎng)絡(luò)等。
$ docker container inspect nginx
。。。。。。
docker container exec
docker container exec
可以進(jìn)入到運(yùn)行中的容器并執(zhí)行一個(gè)命令。
$ docker container exec -it nginx /bin/bash
root@11f5e64bb119:/#
docker container attach
docker container attach
同樣可以進(jìn)入到運(yùn)行中的容器并執(zhí)行一個(gè)命令。
docker container attach
進(jìn)入容器然后退出會(huì)導(dǎo)致容器停止,而docker container exec
進(jìn)入容器后退出不會(huì)導(dǎo)致容器停止,這是兩者的區(qū)別。
$ docker container attach nginx
docker container cp
docker container cp
用來在宿主機(jī)和容器之間拷貝文件。
從宿主機(jī)拷貝文件到容器中:
$ docker container cp test.txt nginx:/home
從容器中拷貝文件到宿主機(jī):
$ docker container cp nginx:/docker-entrypoint.sh .
docker container export
docker container export
是將一個(gè)容器導(dǎo)出為一個(gè)壓縮的鏡像。
$ docker container export nginx > nginx.tar.gz
后續(xù)如果要將這個(gè)壓縮的鏡像導(dǎo)入要使用docker image import
命令。
docker container commit
docker container commit
是將一個(gè)容器提交為為一個(gè)鏡像。
$ docker container commit -m "nginx v1.0" nginx nginx:v1.0
sha256:0b36bf0f81dda62c4ced29e84d0b44a7c812bb643b2c1d898df0b8897f58c964
docker container diff
docker container diff
命令用于檢查容器文件系統(tǒng)上文件或目錄的更改。
$ docker container diff nginx
C /run
A /run/nginx.pid
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/uwsgi_temp
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf
docker container pause
docker container pause
暫停一個(gè)或多個(gè)容器內(nèi)的所有進(jìn)程。
$ docker container pause nginx
nginx
使用docker container ls
可以看到容器的狀態(tài)為pause
。
docker container unpause
docker container unpause
取消暫停一個(gè)或多個(gè)容器內(nèi)的所有進(jìn)程。
$ docker container unpause nginx
nginx
此時(shí)容器的狀態(tài)又變?yōu)?code>UP。
docker container rename
docker container rename
重命名容器。
$ docker container rename nginx ng
docker container port
docker container port
列出容器的端口映射或容器的特定映射。
$ docker container port nginx
80/tcp -> 0.0.0.0:8899
80/tcp -> :::8899
docker container update
docker container update
可以更新一個(gè)或多個(gè)容器的配置,可以更新CPU、內(nèi)存等配置信息。
具體可以更新的選項(xiàng)如下:
$ docker container update --help
Usage: docker container update [OPTIONS] CONTAINER [CONTAINER...]
Update configuration of one or more containers
Options:
--blkio-weight uint16 Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
--cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
--cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota
--cpu-rt-period int Limit the CPU real-time period in microseconds
--cpu-rt-runtime int Limit the CPU real-time runtime in microseconds
-c, --cpu-shares int CPU shares (relative weight)
--cpus decimal Number of CPUs
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
--kernel-memory bytes Kernel memory limit
-m, --memory bytes Memory limit
--memory-reservation bytes Memory soft limit
--memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable unlimited swap
--pids-limit int Tune container pids limit (set -1 for unlimited)
--restart string Restart policy to apply when a container exits
下面的例子可以更改容器的重啟策略:
$ docker container update --restart=no nginx
nginx
參數(shù)說明:
-
no
:默認(rèn)策略,在容器退出時(shí)不重啟容器 -
on-failure
:在容器非正常退出時(shí)(退出狀態(tài)非0),才會(huì)重啟容器 -
on-failure:3
:在容器非正常退出時(shí)重啟容器,最多重啟3次 -
always
:在容器退出時(shí)總是重啟容器 -
unless-stopped
:在容器退出時(shí)總是重啟容器,但是不考慮在Docker守護(hù)進(jìn)程啟動(dòng)時(shí)就已經(jīng)停止了的容器
docker container wait
docker container wait
阻止一個(gè)或多個(gè)容器停止,然后打印退出代碼。
$ docker container wait nginx
0
docker container prune
docker container prune
刪除所有停止的容器。
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
5932d5e624f7cced52fb8f9282a01c5a112fba249236d028733c424ec7099a6e
容器運(yùn)行的兩種交互模式
attach模式
例如:
$ docker container run -p 80:80 nginx
通過這種方式創(chuàng)建的容器,容器會(huì)在前臺(tái)執(zhí)行。
容器的輸入輸出結(jié)果會(huì)反映到本地端,本地端的輸入輸出也會(huì)反映到容器,例如能在終端看到網(wǎng)頁瀏覽器的 log,ctrl+c會(huì)讓容器停止。
一般情況不推薦使用attach模式。
detach模式
例如:
$ docker container run -d -p 80:80 nginx
73773e7f0d409e4fba9b1ca6b0c0f2eebab7fa9b030dfe4d2c1cf2865c7275bd
通過這種方式創(chuàng)建的容器會(huì)在后臺(tái)執(zhí)行,命令行打印完容器的ID就結(jié)束了。
連接容器的shell
docker container run -it
創(chuàng)建一個(gè)容器并進(jìn)入交互式模式:
$ docker container run -it nginx /bin/bash
root@7faafc56bd4f:/# exit
exit
如果帶了-d
參數(shù),-it
就不會(huì)生效。文章來源:http://www.zghlxwxcb.cn/news/detail-683784.html
docker container exec -it
在一個(gè)已經(jīng)運(yùn)行的容器里執(zhí)行一個(gè)額外的command:文章來源地址http://www.zghlxwxcb.cn/news/detail-683784.html
$ docker container run -d nginx
06d4f86b592e417c876bc66bd62f5ddbd3aeaa1c8c6dd93670ef73151f32a851
$ docker container exec -it 06 bash
root@06d4f86b592e:/#
批量刪除容器
$ docker container rm -f $(docker container ls -aq)
06d4f86b592e
7faafc56bd4f
docker container run背后發(fā)生了什么?
$ docker container run -d --publish 80:80 --name webhost nginx
- 在本地查找是否有nginx這個(gè)image鏡像,但是沒有發(fā)現(xiàn)
- 去遠(yuǎn)程的image registry查找nginx鏡像(默認(rèn)的registry是Docker Hub)
- 下載最新版本的nginx鏡像 (nginx:latest 默認(rèn))
- 基于nginx鏡像來創(chuàng)建一個(gè)新的容器,并且準(zhǔn)備運(yùn)行
- docker engine分配給這個(gè)容器一個(gè)虛擬IP地址
- 在宿主機(jī)上打開80端口并把容器的80端口轉(zhuǎn)發(fā)到宿主機(jī)上
- 啟動(dòng)容器,運(yùn)行指定的命令(這里是一個(gè)shell腳本去啟動(dòng)nginx)
到了這里,關(guān)于【docker】容器的運(yùn)行、停止、查看等基本操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!