从镜像运行容器

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。