一、基础操作
1、查看docker版本
bash
docker version
2、显示docker系统的信息
bash
docker info
3、显示docker运行状态(故障检查)
bash
service docker status
4、启动docker服务
bash
service docker start
5、停止docker服务
bash
service docker stop
6、重启docker服务
bash
service docker restart
二、镜像操作
1、拉取官方的 Ubuntu 镜像
bash
docker pull ubuntu
2、查看本地所有镜像
bash
docker images
3、删除镜像(<image_id> 是通过 docker images 命令得到的)
bash
docker rmi <image_id>
4、构建镜像('.' 表示使用当前目录下的 Dockerfile 来构建镜像)
bash
docker build -t my_image .
5、重命名镜像
bash
docker tag my_image my_new_image
6、镜像推送到私有仓库
bash
# 标记本地镜像以便推送到私有仓库
docker tag my-image myregistry.example.com:5000/my-image
# 推送镜像到私有仓库
docker push myregistry.example.com:5000/my-image
# 从私有仓库拉取镜像
docker pull myregistry.example.com:5000/my-image
7、查看指定镜像的创建历史
bash
docker history [image_id]
8、指定镜像保存成 tar 归档文件, docker load 的逆操作
bash
docker save
9、将镜像 ubuntu:14.04 保存为 ubuntu14.04.tar 文件
bash
docker save -o ubuntu14.04.tar ubuntu:14.04
10、从 tar 镜像归档中载入镜像, docker save 的逆操作
bash
docker load
11、上面命令的意思是将 ubuntu14.04.tar 文件载入镜像中
bash
docker load -i ubuntu14.04.tar
docker load < /home/save.tar
12、构建自己的镜像
bash
docker build -t <镜像名> <Dockerfile路径>
docker build -t xx/gitlab .
三、容器操作
1、查看当前运行的容器
bash
docker ps
2、查看全部容器
bash
docker ps -a
3、查看全部容器的id和信息
bash
docker ps -a -q
4、查看全部容器占用的空间
bash
docker ps -as
5、查看一个正在运行容器进程,支持 ps 命令参数
bash
docker top
6、查看容器的示例id
bash
sudo docker inspect -f '{{.Id}}' [id]
7、检查镜像或者容器的参数,默认返回 JSON 格式
bash
docker inspect
8、查看容器日志
bash
docker logs -f <容器名称orID>
9、保存某个容器成为一个镜像
bash
docker commit -a "user" -m "commit info" [CONTAINER] [imageName]:[imageTag]
10、推送一个容器到中心仓库
bash
# 登录
docker login --username=[userName] --password=[pwd] [registryURL]
docker tag [imageID] [remoteURL]:[imageTag]
docker push [remoteURL]:[imageTag]
11、拉取提交的容器
bash
docker pull [remoteURL]:[imageTag]
12、对比容器的改动
bash
docker diff
13、创建一个容器命名为 test
bash
# 使用镜像daocloud.io/library/ubuntu
docker create -it --name test daocloud.io/library/ubuntu
14、创建并启动一个容器 名为 test
bash
# 使用镜像daocloud.io/library/ubuntu
docker run --name test daocloud.io/library/ubuntu
15、删除一个容器
bash
docker rm [容器id]
16、删除所有容器
bash
docker rm `docker ps -a -q`
17、根据Dockerfile 构建
bash
docker build -t [image_name] [Dockerfile_path]
18、把一个正在运行的容器保存为镜像
bash
docker commit <CONTAIN-ID> <IMAGE-NAME>
19、启动、停止、重启容器
bash
docker start|stop|restart [id]
20、暂停、恢复某一容器的所有进程
bash
docker pause|unpause [id]
21、杀死一个或多个指定容器进程
bash
docker kill -s KILL [id]
22、停止全部运行的容器
bash
docker stop `docker ps -q`
23、杀掉全部运行的容器
bash
docker kill -s KILL `docker ps -q`
24、交互式进入容器
bash
sudo docker exec -it {{containerName or containerID}} /bin/bash
sudo docker exec -i {{containerName or containerID}} /bin/bash
sudo docker exec -t {{containerName or containerID}} /bin/bash
sudo docker exec -d {{containerName or containerID}} /bin/bash
只用 -i 参数,由于没有分配伪终端,看起来像pipe执行一样。但是执行结果、命令返回值都可以正确获取。
只用 -t 参数,则可以看到一个 console 窗口,但是执行命令会发现由于没有获得stdin的输出,无法看到命令执行情况。
使用 -it 时,则和我们平常操作 console 界面类似,而且也不会像attach方式因为退出,导致整个容器退出。
使用 -d 参数,在后台执行一个进程。如果一个命令需要长时间进程,会很快返回
25、查看容器的root用户密码
bash
docker logs <容器名orID> 2>&1 | grep '^User: ' | tail -n1
26、容器于宿主拷贝文件
bash
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
27、本地文件上传到对应容器的目录
bash
docker cp local.sh [CONTAINERid]:[TagPath]
四、重点看一下docker run的参数
1、后台运行 centos6-ssh 这个容器(-d)、并将容器内部的22端口映射到宿主机的63301端口
bash
docker run -d -p 192.168.0.2:63301:22 centos6-ssh
2、run 命令的参数解释
bash
-a, --attach=[]:指定要附加到的标准输入、输出或错误输出。
--add-host=[]:添加自定义主机到 IP 映射。
--blkio-weight=0:块 I/O 的相对权重。
-c, --cpu-shares=0:CPU 份额(相对权重)。
--cap-add=[]:添加 Linux 能力。
--cap-drop=[]:去除 Linux 能力。
--cgroup-parent=:容器的可选父 cgroup。
--cidfile=:将容器 ID 写入文件。
--cpu-period=0:限制 CPU CFS(完全公平调度器)周期。
--cpu-quota=0:限制 CPU CFS 配额。
--cpuset-cpus=:允许在其中执行的 CPU(0-3、0、1),绑定容器到指定 CPU。
--cpuset-mems=:允许在其中执行的 MEM(0-3、0、1),绑定容器到指定 MEM。
-d, --detach=false:在后台运行容器并打印容器 ID。
--device=[]:向容器添加主机设备。
--dns=[]:设置自定义 DNS 服务器。
--dns-search=[]:设置自定义 DNS 搜索域。
-e, --env=[]:设置环境变量。
--entrypoint=:覆盖镜像的默认入口点。
--env-file=[]:从指定文件读取环境变量。
--expose=[]:暴露一个或一系列端口。
-h, --hostname=:指定容器的主机名。
--help=false:打印使用说明。
-i, --interactive=false:即使未附加也保持 STDIN 打开,通常与 -t 一起使用。
--ipc=:IPC 命名空间。
-l, --label=[]:在容器上设置元数据。
--label-file=[]:读取标签的行分隔文件。
--link=[]:添加到另一个容器的链接。
--log-driver=:容器的日志驱动程序。
--log-opt=[]:日志驱动程序选项。
--lxc-conf=[]:添加自定义 lxc 选项。
-m, --memory=:内存限制。
--mac-address=:容器的 MAC 地址。
--memory-swap=:总内存(内存+交换空间),-1 表示禁用交换空间。
--name=:为容器指定名称。
--net=bridge:设置容器的网络连接模式,支持 bridge/host/none/container:<name|id> 四种类型。
--oom-kill-disable=false:禁用 OOM 杀手。