前言

最近看了极客学院的视屏,学到了一点新的东西。在此,继续总结一下。


docker相关基本命令

  • docker info
    查看文件存储物理地址和docker驱动

容器基本命令

  • 启动容器
docker run IMAGE [COMMAND(运行命令)][ARG(运行命令参数)]
# Ex1.
docker run ubantu echo 'Hello World'
hello world!

docker run -i -t IMAGE /bin/bash
-i --interactive=true|false 默认为false(通知守护进程为容器打开标准输入)
-t --tty=true|false 默认为false(docker为创建容器构件一个伪tty终端)
# Ex2. 进入容器内部
docker run -i -t ubantu /bin/bash

# 自定义容器名称 
docker run --name=<containerName>
docker run --name=container01 -i -t ubantu /bin/bash

# port 
docker run -P,--publish-all=true|false 默认为false(影射所有端口)
docker run -P -i -t ubuntu /bin/bash

docker -p,--publish=[] (指定映射部分端口)
# EX.conatinerPort(指指定容器端口 宿主机端口随机映射)
docker run -p 80 -i -t ubuntu /bin/bash
# hostPort:containerPort(经常这样使用 容器 宿主机端口都指定)
docker run -p 8080:80 -i -t ubuntu /bin/bash
# ip::containerPort
docker run -p 0.0.0.0.:80 -i -t ubuntu /bin/bahs
# ip:hostPort:containerPort
docker run -p 0.0.0.0:8080:80 -i -t ubuntu /bin/bash
  • 查看容器
docker ps [-a][-l]
-a all 所有容器
-l lastest 最新创建的容器
# 查看正在运行中的容器
docker ps 
# 查看所有的容器
docker ps -a

CONTAINER ID        IMAGE                                         COMMAND                  CREATED             STATUS                    PORTS                                        NAMES
1d92829fb478        zabbix/zabbix-agent:alpine-3.2.5              "/bin/bash /run_zabb…"   4 days ago          Exited (0) 13 hours ago                                                some-zabbix-agent

# docker inspect
docker inspect <containID>/<containName>
  • 重启容器
docker start[-i]<containerID>/<containerName>
  • 删除容器
# 只能删除停止运行的容器
docker rm <containerID>/<containerName>

守护式进程

  • 守护式容器(长期运行/无交互式会话/适合应用程序与服务)
docker run -i -t ubantu /bin/bash
# 守护式运行
ctrl+p / ctrl+q

docker run -d <imageName>
-d后台运行

docker run --name dc1 -d ubuntu /bin/sh -c "while true;do echo "hello world";sleep 1; done;"
  • 进入守护式容器
docker attach <containerId>
  • 查看容器日志
docker logs [-f] [-t][--tail] <容器名>
-f --follows=true|false 默认false (一直跟踪logs的变化,并返还结果)
-t --timestamps=true |false 默认false(返回结果上 加上时间戳)
--tail="all"(返回logs的数量)

# Ex 1
docker logs -tf --tail 10 dc1
# Ex 2
docker logs -tf --tail 0 dc1(最新日志)
  • 查看容器内进程
docker top <containerID>
  • 启动新进程(不关闭旧进程)
docker exec [-d][-i][-t] 容器名[COMMAND][ARG]

# EX1
docker exec -t -t dc1 /bin/bash
ctrl+p ctrl+q
docker top dc1
  • 关闭容器
docker stop <containerID> (发送stop信号 时间较长)
docker kill <containerID> (直接关闭 时间较短)

docker镜像基本命令

  • 查看镜像列表
docker images [OPTIONS][REPOSITORY]
-a,--all=false
-f,--filter=[](过滤条件)
--no-trunc=false(不截断数据)
-q,--quiet=false(只显示唯一ID)

# EX.
docker images

#DOCKER REGISTRY
# REPOSITORY 仓库(多个不同TAG的image) TAG
默认为TAG(latest) 同一镜像可以打多个标签

docker images -a(可以看到中间层的镜像)

docker images centos
  • 查看镜像详细信息
docker inspect [OPTINOS] CONTAINER|IMAGE [CONTAINER|IMAGE..]
-f,--format=""

#EX
docker inspect ubuntu:14.04
  • 删除镜像
docker rmi [OPTIONS] IMAGE[IMAGE...]
-f --force=false Force removal of the image(强制删除镜像)
--no-prune=false Do not delete untagged parents(保留未打标签的父镜像)
# 删除镜像(如果镜像被打了其它的tag,表示并没有被完全删除)
docker rmi ubuntu:12.04
# 删除镜像(彻底删除 包括不同TAG) 
docker rmi <imageID> 
# 一次删除两个镜像
docker rmi ubuntu:12.04 ubuntu:precise
# 删除全部
docker rmi $(docker images -q ubuntu)
  • 查找镜像(hub.docker.com/命令)
docker search [OPTIONS] TERM
--automated=false Only show automated builds
--no-trunc=false Don't truncate output
-s --stars=0 Only displays with at least x stars
最多返回25个结果
# Ex.
docker search ubuntu
docker search -s 3 ubuntu
  • 拉取镜像
docker pull [OPTIONS] NAME [:TAG}
-a --all-tags=false Download all tagged images in the repository.
(下载某个仓库内不同TAG(版本))

docker pull ubuntu:14.04
docker images

# 使用国内代理
--resistry-mirror选项
1. 修改: /etc/default/docker
2. 添加: DOCKER_OPTS="--registry-mirror=https://www.xxx.daocloud.io/xxx"
3. service docker restart
  • 推送镜像
docker push NAME[:TAG]
docker push username/imagesname
#仅会提交修改的内容
  • 构建镜像
  • docker commit 通过容器构建
  • docker build 通过Dockefile文件构建
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a --author="" 
-m --messgae="" COmmit message
-p --pause=true Pause container duroing commit(不暂停需要构建的容器)

docker commit -a "author" -m "message" comit_test username/commit_test1
docker images

docker run -d --name nginx_web2 -p 80 username/commit_test1 nginx -g "daemon off;"
curl http://127.0.0.1<port>
  • Dockerfile文件&docker build
docker build [OPTIONS] PATH | URL |-
--force-rm=false
--no-cache=false
--pull=false
-q,--quiet=fase
--rm=true
-t,--tag=""

touch Dockerfile
vi Dockerfile
# Dockerfile文件略
docker buld -t "uasername/df_test1" .
#“.”表示dockerfile文件所在的地址

docker run -d --name nginx_web2 -p 80 username/df_test1 nginx -g "daemon off;"

构件自己的Nginx容器

docker run -p 80 --name nginx -i -t ubuntu /bin/bash
apt-get install -y nginx
apt-get install -y vim
mkdir -p /var/www/yanxml/com/html
cd /var/www/yanxml/com/html

# vi hello.html
<html>
<head>Nginx to Docker</head>
<body><h1>Hello,Irm website in docker</h1></body>
</html>

whereis nginx

vim /etc/nginx/sites-enabled/default
# 修改root行 为 "root /var/www/yanxml/com/html"

# 启动nginx 
nginx
#ctrl+p

docker ps 查看端口映射
docker port <containerID>
docker top <containerID>
curl http://127.0.0.1:port


# docker inspect <查看容器的ipAddress> 


docker exec ngin(容器名) nginx 

# 重启容器后 容器的IP有可能会进行改变。

构件容器

# 使用dockerfile构件容器
docker build -f /path/to/a/Dockerfile .