Docker的学习推荐在工程中使用时边学边用,通过多次使用就可以熟练掌握基础的流程。
此处博主直接采用鱼香ROS的一键安装脚本进行:鱼香ROS官方教程
wget http://fishros.com/install -O fishros && . fishros
使用上述指令进入安装程序并按照提示进行即可。
对于任意指令,学习的方式如下:
--help
查看参数说明docker version # 显示Docker版本信息
docker info # 显示Docker系统信息
docker --help # 帮助手册
用于按规定展示对应的镜像信息,指令用法如下:
docker images [OPTIONS] [REPOSITORY[:TAG]] # 罗列本地镜像
常用[OPTIONS]:
-a, --all # 显示所有镜像
-f, --filter # 过滤符合条件的镜像(--filter "SIZE=100",过滤出大小高于100的镜像)
-q, --auiet # 仅显示镜像ID
也可指定显示镜像的[REPOSITORY[:TAG]]
,从而显示对应镜像,展现所有镜像如下:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 77af4d6b9913 19 hours ago 1.089 GB
committ latest b6fa739cedf5 19 hours ago 1.089 GB
postgres 9 746b819f315e 4 days ago 213.4 MB
postgres 9.3 746b819f315e 4 days ago 213.4 MB
展示信息如下:
REPOSITORY
:镜像仓库名TAG
:镜像标签(类似于Github中的分支Tag)IMAGE ID
:镜像ID,用于标识本地镜像CREATED
:镜像创建时间SIZE
:镜像大小更多用法可参考官方手册:docker images指令
用于删除一个或多个镜像,指令用法如下:
docker rmi [OPTIONS] IMAGE [IMAGE...]
常用[OPTIONS]:
-f, --force # 强制删除
删除镜像可以使用[REPOSITORY[:TAG]]
或者IMAGE ID
进行:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test1 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB)
$ docker rmi fd484f19954f
Untagged: test1:latest
Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8
# 或者使用如下指令
$ docker rmi test1:latest
更多用法可参考官方手册:docker rmi指令
用于搜索dockerhub中是否存在对应的镜像包,指令用法如下:
docker search [OPTIONS] TERM
常用[OPTIONS]:
-f, --filter # 过滤器
使用效果如下:
$ docker search busybox
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
busybox Busybox base image. 316 [OK]
progrium/busybox 50 [OK]
radial/busyboxplus Full-chain, Internet enabled, busybox made... 8 [OK]
odise/busybox-python 2 [OK]
azukiapp/busybox This image is meant to be used as the base... 2 [OK]
ofayau/busybox-jvm Prepare busybox to install a 32 bits JVM. 1 [OK]
shingonoide/archlinux-busybox Arch Linux, a lightweight and flexible Lin... 1 [OK]
odise/busybox-curl 1 [OK]
ofayau/busybox-libc32 Busybox with 32 bits (and 64 bits) libs 1 [OK]
peelsky/zulu-openjdk-busybox 1 [OK]
skomma/busybox-data Docker image suitable for data volume cont... 1 [OK]
elektritter/busybox-teamspeak Lightweight teamspeak3 container based on... 1 [OK]
socketplane/busybox 1 [OK]
oveits/docker-nginx-busybox This is a tiny NginX docker image based on... 0 [OK]
ggtools/busybox-ubuntu Busybox ubuntu version with extra goodies 0 [OK]
nikfoundas/busybox-confd Minimal busybox based distribution of confd 0 [OK]
openshift/busybox-http-app 0 [OK]
jllopis/busybox 0 [OK]
swyckoff/busybox 0 [OK]
powellquiring/busybox 0 [OK]
williamyeh/busybox-sh Docker image for BusyBox's sh 0 [OK]
simplexsys/busybox-cli-powered Docker busybox images, with a few often us... 0 [OK]
fhisamoto/busybox-java Busybox java 0 [OK]
scottabernethy/busybox 0 [OK]
marclop/busybox-solr
更多用法可参考官方手册:docker search指令
用于从仓库中下载指定的镜像,指令用法如下:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
常用[OPTIONS]:
-a, --all # 拉取所有镜像
NAME[:TAG|@DIGEST]
表示为需要下载的对应TAG
的镜像,若不指定TAG
则表示下载最新版本(latest
):
$ docker pull debian
Using default tag: latest
latest: Pulling from library/debian
e756f3fdd6a3: Pull complete
Digest: sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510
Status: Downloaded newer image for debian:latest
docker.io/library/debian:latest
$ docker pull debian:bullseye
bullseye: Pulling from library/debian
Digest: sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510
Status: Downloaded newer image for debian:bullseye
docker.io/library/debian:bullseye
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian bullseye 4eacea30377a 8 days ago 124MB
debian latest 4eacea30377a 8 days ago 124MB
更多用法可参考官方手册:docker pull指令
用于创建一个容器并运行它,指令用法如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用[OPTIONS]:
-d, --detach # 后台运行容器并返回容器ID
-i # 交互模式运行,通常和-t一起使用(-it)
-t # 重新分配终端,通常和-i一起使用(-it)
-p # 指定容器的端口映射,通常使用hostPort:containerPort进行描述(8080:8080)
--name # 指定容器的名字
如下构建了一个名为test的容器,并使用交互方式启动:
$ docker run --name test -it debian
root@d6c0fe130dba:/# exit
更多用法可参考官方手册:docker run指令
用于显示创建的容器,指令用法如下:
docker ps [OPTIONS]
常用[OPTIONS]:
-a, --all # 展示所有容器而非默认的仅显示运行中的容器
-f, --filter # 过滤器
-q, --quiet # 仅显示容器ID
显示如下:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c01db0b339c ubuntu:22.04 bash 17 seconds ago Up 16 seconds 3300-3310/tcp webapp
d7886598dbe2 crosbymichael/redis:latest /redis-server --dir 33 minutes ago Up 33 minutes 6379/tcp redis,webapp/db
更多用法可参考官方手册:docker ps指令
指令用法如下:
docker start [OPTIONS] CONTAINER [CONTAINER...] # 启动容器
docker restart [OPTIONS] CONTAINER [CONTAINER...] # 重启容器
docker stop [OPTIONS] CONTAINER [CONTAINER...] # 停止容器
docker kill [OPTIONS] CONTAINER [CONTAINER...] # 停止容器
可使用Name
或CONTAINER ID
启动容器,退出容器可以键入exit
进行退出,此时容器将被关闭。也可以使用键盘按键Ctrl+P+Q
进行退出,此时容器将在后台持续运行。
更多用法可参考官方手册:docker start指令、docker restart指令、docker stop指令、docker kill指令
用于删除容器,指令用法如下:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
常用[OPTIONS]:
-f, --force # 强制删除
更多用法可参考官方手册:docker rm指令
用于进入后台运行中的容器,不同的是docker exec
指令将重新开启一个新进程进入容器,docker attach
则继续在现有进程中进入容器:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
常用[OPTIONS]:
-d, --detach # 后台运行
-it # 新建交互终端
docker attach CONTAINER
应注意,由于docker attach
直接进入容器现有进程,在使用exit
退出时容器将直接stop
(若后台无运行)。而exec
则新开一个进程,在使用exit
退出时容器仅关闭当前进程。
更多用法可参考官方手册:docker exec指令、docker attach指令
docker logs
用于获取到容器的日志信息,docker top
则获取容器的进程情况:
docker logs [OPTIONS] CONTAINER
常用[OPTIONS]:
--until # 获取多少时间内的日志输出
--tail # 后加数字表示显示多少条日志输出
docker top CONTAINER [ps OPTIONS]
示例如下:
$ docker run --name test -d busybox sh -c "while true; do $(echo date); sleep 1; done"
$ date
Tue 14 Nov 2017 16:40:00 CET
$ docker logs -f --until=2s test
Tue 14 Nov 2017 16:40:00 CET
Tue 14 Nov 2017 16:40:01 CET
Tue 14 Nov 2017 16:40:02 CET
$ docker top c8530dbbe3b4
UID PID PPID C STIME TTY TIME CMD
root 27437 27421 0 16:43 ? 00:00:00 /bin/sh -c
更多用法可参考官方手册:docker logs指令、docker top指令
用于将容器内的数据复制到主机上,或者将主机上的数据复制至容器内,类似于scp
:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
使用示例如下:
# 将本地文件上传容器
docker cp ./some_file CONTAINER:/work
# 将容器文件下载本地
docker cp CONTAINER:/var/logs/ /tmp/app_logs
更多用法可参考官方手册:docker cp指令