从镜像运行容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID
- -i: 以交互模式运行容器,通常与 -t 同时使用
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
- -P: 随机端口映射,容器内部端口随机映射到主机的高端口
- -p: 指定端口映射,宿主机端口:容器端口
- –name=“nginx-lb”: 为容器指定一个名称(方便过滤操作)
- –dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致
- -h “slave-8”: 指定容器的hostname
- -e useremail=“xxx@123.com”: 设置环境变量
- –env-file=[]: 从指定文件读入环境变量
- -m :设置容器使用内存最大值
- –net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型
- –link=[]: 添加链接到另一个容器
- –expose=[]: 开放一个端口或一组端口
- –volume , -v: 绑定一个卷
docker run -p 80:80 -v /data:/data -d nginx:latest
使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
查看镜像
docker images
- -q 只输出镜像,可以用于定向操作。
删除指定镜像名[标签]的镜像
docker rmi $(docker images -q --filter=reference=’$CONTAINER_NAME[:$TAG]’)
查看容器进程
docker ps
- -a 列出包括未运行的所有容器
- -f :根据条件过滤显示的内容
•
根据容器名过滤:
$ docker ps --filter"name=“oceanbase"
根据镜像名过滤
$ docker ps --filter ancestor=nginx
根据镜像ID过滤
$ docker ps --filter ancestor=d0e008c6cf02
根据启动顺序过滤(在某容器启动之前或之后)
$ docker ps -f since=6e63f6ff38b0
- -n :列出最近创建的n个容器
- –no-trunc :不截断输出
- -q 只显示容器ID
- -s :显示总的文件大小。
启动容器实例
docker start [OPTIONS] CONTAINER [CONTAINER…]
进入正在运行的容器
docker attach [OPTIONS] CONTAINER
停止容器实例
docker stop [OPTIONS] CONTAINER [CONTAINER…]
重启容器实例
docker restart [OPTIONS] CONTAINER [CONTAINER…]
kill容器
docker kill [OPTIONS] CONTAINER [CONTAINER…]
删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER…]
- -f :通过 SIGKILL 信号强制删除一个运行中的容器
- -l :移除容器间的网络连接,而非容器本身
- -v :删除与容器关联的卷
删除(多个)镜像
docker rmi [OPTIONS] IMAGE [IMAGE…]
- -f :强制删除;
- –no-prune :不移除该镜像的过程镜像,默认移除;
暂停容器所有进程
docker pause [OPTIONS] CONTAINER [CONTAINER…]
恢复容器所有进程
docker unpause [OPTIONS] CONTAINER [CONTAINER…]
创建但不启动容器
docker create [OPTIONS] IMAGE [COMMAND] [ARG…]
在容器中执行命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
- -d :分离模式: 在后台运行
- -i :即使没有附加也保持STDIN 打开
- -t :分配一个伪终端
在容器 mynginx 中以交互模式执行容器内 /root/runoob.sh 脚本:
$ docker exec -it nginx /bin/sh /tmp/startnginx.sh https://www.baidu.com/
获取容器/镜像的元数据
docker inspect [OPTIONS] NAME|ID [NAME|ID…]
- -f :指定返回值的模板文件。
- -s :显示总的文件大小。
- –type :为指定类型返回JSON。
$ docker inspect 35c2110465d8
[
{
“Id”: “sha256:35c2110465d88b2cdd0bc7a6665422637d0fce9941d4e209523a87fba09e6eae”,
“RepoTags”: [
“cloudfoundry/golang-ci:latest”,
“harbor.domain.com:8088/golang/golang1.12:v1.2”
],
“RepoDigests”: [
“cloudfoundry/golang-ci@sha256:bfd8311e2e225d27f5f4cfd4375e645c1cc7cb55fc17cb263622b5025cdcf64b”
],
“Parent”: “”,
“Comment”: “”,
“Created”: “2020-02-27T16:33:31.068681898Z”,
“Container”: “3e13c0b1659994fed16ad5ef95e22a31b5b22ab9c499143e2bc9bdcb2f13cd47”,
“ContainerConfig”: {
“Hostname”: “”,
“Domainname”: “”,
“User”: “”,
“AttachStdin”: false,
“AttachStdout”: false,
“AttachStderr”: false,
“Tty”: false,
“OpenStdin”: false,
“StdinOnce”: false,
“Env”: [
“PATH=/root/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”,
“HOME=/root”,
“GOPATH=/root/go”
],
“Cmd”: [
“|1”,
“go_version=go1.13.3”,
“/bin/sh”,
“-c”,
“wget -qO- https://dl.google.com/go/${go_version}.linux-amd64.tar.gz | tar -C /usr/local -xzf -”
],
“ArgsEscaped”: true,
“Image”: “sha256:e67d021eb78d22cdf92db67da02040600101f11c157ce8cdf4306f2527745876”,
“Volumes”: null,
“WorkingDir”: “”,
“Entrypoint”: null,
“OnBuild”: null,
“Labels”: null
},
“DockerVersion”: “18.09.6”,
“Author”: “https://github.com/cloudfoundry-incubator/diego-dockerfiles”,
“Config”: {
“Hostname”: “”,
“Domainname”: “”,
“User”: “”,
“AttachStdin”: false,
“AttachStdout”: false,
“AttachStderr”: false,
“Tty”: false,
“OpenStdin”: false,
“StdinOnce”: false,
“Env”: [
“PATH=/root/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”,
“HOME=/root”,
“GOPATH=/root/go”
],
“Cmd”: [
“/bin/bash”
],
“ArgsEscaped”: true,
“Image”: “sha256:e67d021eb78d22cdf92db67da02040600101f11c157ce8cdf4306f2527745876”,
“Volumes”: null,
“WorkingDir”: “”,
“Entrypoint”: null,
“OnBuild”: null,
“Labels”: null
},
“Architecture”: “amd64”,
“Os”: “linux”,
“Size”: 864025235,
“VirtualSize”: 864025235,
“GraphDriver”: {
“Data”: {
“LowerDir”: “/var/lib/docker/overlay2/3ecda8778d83e9d8ee23e812c2bb230b138132aa9246c4530265ca5a792d4617/diff:/var/lib/docker/overlay2/e92d2377af2fdbc0ec9444fc089b13882c9c08f4538a704728e6db730bd6b0b6/diff:/var/lib/docker/overlay2/c4cbbcdad005b84135f7d4553a9861e5f7559e0a5604045f474c317518db83f4/diff:/var/lib/docker/overlay2/66beb7ee5cc63f5ced41390d55354d4b7a7e0751c159e213edeb815c6ae4491d/diff:/var/lib/docker/overlay2/b4701fe809271d4309ef389bdfd044d401a7e404baf33d55e1a1547cec0e537c/diff:/var/lib/docker/overlay2/f4d896735bad6525d4bcc23632a8d0e7e7f928b6eca3d2b84d4ad6dd59b86082/diff”,
“MergedDir”: “/var/lib/docker/overlay2/3042df3ec6ac827dc79775087167f16d2f22dd1a9361ed31714d31308a39bc38/merged”,
“UpperDir”: “/var/lib/docker/overlay2/3042df3ec6ac827dc79775087167f16d2f22dd1a9361ed31714d31308a39bc38/diff”,
“WorkDir”: “/var/lib/docker/overlay2/3042df3ec6ac827dc79775087167f16d2f22dd1a9361ed31714d31308a39bc38/work”
},
“Name”: “overlay2”
},
“RootFS”: {
“Type”: “layers”,
“Layers”: [
“sha256:9e6f810a2aabaa90d8e79f52847c74617a94e78fe223f4f067d84a6bd63b9393”,
“sha256:0040d8f00d7e5afc3a96cbc5f10b21d355e5f0efc03f5eb0e523c5c05fb69356”,
“sha256:aa6685385151f01c1a936ff0b2219539b0f92ebdce8030ff262c88c9ebd294c6”,
“sha256:4ae3adcb66cbcfca0b15c25b144694f6899737dca6867387dfb789e5ba4f1249”,
“sha256:fe239ad8aa2b16b557c6983e8dd95add9bb53ad275a881283aed2975022a330f”,
“sha256:743e294e8429eda2797d9b65fc517b6cb0cd48759dc980932f755cd45bbca5f7”,
“sha256:c08408accd402bd6d4ac58e86f8f2698bb4356b2671a2a736b7e20712a9a6fe4”
]
},
“Metadata”: {
“LastTagTime”: “2020-02-28T09:31:58.5840111Z”
}
}
]
获取正在运行的容器con-012的 IP。
docker inspect --format=’{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ con-012
172.17.0.2
查看正在运行容器的进程
docker top :查看容器中运行的进程信息,支持 ps 命令参数。
获取容器日志
docker logs [OPTIONS] CONTAINER
- -f : 跟踪日志输出
- –since :显示某个开始时间的所有日志
- -t : 显示时间戳
- –tail :仅列出最新N条容器日志
获取容器8cf91d3e269a的最近三条日志并加时间戳
$ docker logs -t --tail 3 8cf91d3e269a SIGINT(2) ↵ 1260 11:02:18
2020-02-28T08:12:46.989643700Z INFO[0000] Redis Metrics Exporter <<< filled in by build >>> build date: <<< filled in by build >>> sha1: <<< filled in by build >>> Go: go1.12.12 GOOS: linux GOARCH: amd64
2020-02-28T08:12:46.989696100Z INFO[0000] Providing metrics at :9121/metrics
提交容器修改(从容器创建一个新的镜像)
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
- -a :提交的镜像作者;
- -c :使用Dockerfile指令来创建镜像;
- -m :提交时的说明文字;
- -p :在commit时,将容器暂停
将容器8cf91d3e269a 保存为新的镜像,并添加提交人信息和说明信息
$ docker commit -a “Enzo” -m “upgrade nginx” 8cf91d3e269a nginx:v1.2
数据拷贝
docker cp [OPTIONS] /path/to/src_file CONTAINER:/path/to/dest_file
将本地文件/go/app1 拷贝到容器8cf91d3e269a的/cache/app1
$ docker cp /go/app1 8cf91d3e269a:/cache/app1
登录镜像仓库
docker login [OPTIONS] [SERVER]
- -u 用户名
- -p 密码
以用户名Alex登录Docker Hub
$ docjer login -u Alex -p alex12345
或
$ docjer login
以交互形式输入用户名密码以用户名Alex登录harbor.abc.com仓库(私有仓库)
$ docjer login -u Alex -p alex12345 harbor.abc.com
注销登录
docker logout
查看指定镜像的创建历史
docker history [OPTIONS] IMAGE
- -H :以可读的格式打印镜像大小和日期,默认为true;
- –no-trunc :显示完整的提交记录;
- -q :仅列出提交记录ID。