Docker 之 命令行简记

  • run
docker run                                //创建并启动一个容器

docker run -it  ubuntu /bin/bash          //-i 开启STDIN,也就是开启标准输入
                                          //-t 开启TTY,也就是说开启标准输出
                                          ///bin/bash 创建容器后所执行的命令

docker run --name  ...                    //为容器指定一个唯一的名字
docker run -d                             //创建一个守护式容器
                                          //容器被创建后不会自动进入容器,容器会在后台运行
docker run --log-driver="syslog" ...      //指定docker 的日志驱动为syslog

docker run --restart=always   ...         //无论什么情况,docker容器退出后都自动重启

docker run --restart=on-failure:5         //失败重启5次
docker run --restart=on-failure           //只有出现异常关闭的时候才重启
docker run -p 80                          //在主机中随机选择一个未使用的端口映射到容器80端口
docker run -p 8080:80                    //将主机8080端口映射到容器80端口
docker run -p 127.0.0.1:8080:80          //将主机特定网卡的端口映射到容器80端口
docker run -P xxx                        //随机映射Dockerfile EXPOSE 中的所有端口
docker run --entrypoint                  //覆盖构建镜像的Dockerfile的entrypoint选项
docker run -w                            //覆盖Dockerfile的工作目录
docker run -e "WEB_PORT=8080"            //设置环境变量
docker run --net xxx                     //设置容器网络组
docker run --link redis:db..             //将redis的ip以db作为名字加到host文件中
docker run --add-host=docker:10.0.0.1    //在容器中host文件添加名为docker的ip
docker run --volumes-from xxx ...        //设置和其他容器相同的挂载目录
docker run --rm                           //运行完该容器后就删除该容器 
  • ps
docker ps                                //列出所有的正在运行的容器
docker ps -a                             //列出所有的容器
docker ps -l                             //列出最后一次所运行的容器
docker ps -q                             //只显示容器ID
  • start
docker start xxx                        //重新启动已经停止的容器 xxx可以是id或name
docker restart xxx                      //重新启动已经停止的容器
  • attach
docker attach xxx                       //附着到容器中进行绘画
                                        //使用attach时,推出后容器会再次关闭
  • logs
docker logs xxx                        //获取容器的日志信息(只会获取最后几条)
docker logs -f xxx                     //follow持续跟踪获取日志 
                                       //通过Ctrl+C 取消
docker logs --tail 10 xxx              //获取最新10条内容
docker logs --tail 0 -f xxx            //持续获取最新的日志,而不读取整个日志
                                       //由于单独的-f会一次性获取所有的日志,因此可以和--tail一起使用
docker logs -t                         //为每条日志打上时间戳 
  • top
docker top xxx                       //查看容器中的进程信息
  • stats
docker stats xxx                    //查看容器中进行状态信息
  • exec
docker exec xxx                     //让指定容器执行某个命令
dcoker exec -d xxx touch /opt/newdir//在指定中容器中创建一个文件夹
                                    //-d 后台执行命令

docker exec -it xxx /bin/bash       //开启shell交互式任务,开启后可以直接操作容器                                    
  • stop
docker stop xxx                      //停止某个容器
  • inspect
docker inspect xxx                   //查看某个容器的详细信息
docker inspect --format="{{.State.Running}}" //查看容器的信息的指定某项
                                     //更多-f语法,可以查看Go语言模板
                                     //可以通过/var/lib/docker/containers 中直接查看容器配置
  • rm
docker rm xxx                        //删除某个容器
docker rm -f xxx                     //强制删除某个运行中的容器
docker rm 'docker ps -a -q'          //删除所有的容器
  • images
docker images                        //查看所有的镜像
  • pull
docker pull ubuntu:12.04             //从官网上下载ubuntu镜像,默认tag为latest
  • search
docker search xxx                   //在docker hub中查找某个镜像
  • build
docker build                        //通过Dockerfile文件构建docker
                                    //也可以通过docker commit 构建docker
                                    //但是并不推荐使用,因为过程不可复现而且不灵活,Dockerfile
                                    //具有可重复性,透明性,幂等性等性质
docker build -t="dcc/docker_test:v1" . //-t 指定镜像的名字
                                    //. 指定Dockerfile的位置
docker build xxx git@github.comLdengchengchao/web //通过github仓库指定Dockerfile的位置
docker build -f                     //指定Dockerfile的名字
docker --no-cache                   //关闭docker构建缓存

docker build 过程中出错也会成功构建,出错后依然可以run 容器,可以进入容器查看是那一步没有完成

docker build 可能是一个非常频繁的操作,因此docker自动为Dockerfile添加了缓存,每次build的时候,只会重修改了的步骤开始build

可以尽可能的利用build缓存,比如写Dockerfile模板,将一般不变的东西写在前面,而每次构建都想要更新的东西写在后面

  • history
docker history xxx                 //查看某个 镜像 的构建历史
  • port
docker port xxx                    //查看容器的端口映射情况
  • push
docker push dengchengchao/static_web            //将镜像推送到docker hub的dengchengchao仓库中

可以将docker hub和github设置连接起来,完成自动构建功能

  • rmi
docker rmi dcc/test                   //删除某个镜像
  • network
ip a show docker0                     //查看docker内网地址
docker network create xxx             //创建一个新的docker network
docker network ls                     //查看所有的docker network
docker network rm                     //删除一个docker network
docker network connect app xxx        //将xxx加入到docker network中
docker network inspect xxx            //查看网络的配置
  • volumes-from
docker run -it --rm --volumes-from xxx ubuntu cat xxx  //小技巧,通过volume-from关联挂载目录,查看目录下内容
  • Docker Remote
systemlctl docker stop          //首先关闭docker后台服务
vi /etc/docker/daemon.json      //创建dockerd 配置文件
docker -H ip:2375 info          //连接docker查看信息
                                //可以通过DOCKER_HOST 环境变量省略-H 参数
[GET] http://ip:2375/info       //通过http请求查看docker信息

dockerd开启tcp远程配置

{
  "hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock" ]
}

  • Docker ssl
//生成CA私钥
sudo openssl genrsa -des3 -out ca-key.pem

//生成CA证书
sudo openssl req -new -x509 -days 365 -key ca-key.pem -out ca.pem

//为Docker生成私钥
sudo openssl genrsa -des3 -out server-key.pem

//对私钥进行证书签名请求
//其中Common Name 或CN 要么填写docker服务的主机名,要么为*
sudo openssl req -new -key server-key.pem -out server.csr

//对csr签名并生成服务器证书
sudo openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -out server-cert.pem

//清除服务器秘钥密码
sudo openssl rsa -in server-key.pem -out server-key.pem 

//添加严格的证书权限
sudo chmod 0600 /etc/docker/server-key.pem /etc/docker/server-cert.pem /etc/docker/ca-key.pem /etc/docker/ca.pem

// 添加证书配置
sudo vi /etc/sysconfig/docker
    如:OPTIONS='--selinux-enabled --log-driver=journald --tlsverify=true'
    DOCKER_CERT_PATH=/etc/docker

sudo service docker restart

sudo vi /etc/docker/deamon
{
  "tlsverify": true,
  "tlscert": "/var/docker/server-cert.pem",
  "tlskey": "/var/docker/server-key.pem",
  "tlscacert": "/var/docker/ca.pem",
  "hosts": [
    "tcp://0.0.0.0:2376",
    "unix:///var/run/docker.sock"
  ]
}

//配置客户端
//创建客户端秘钥
sudo openssl genrsa -des3 -out client-key.pem
//创建客户端csr
sudo openssl req -new -key client-key.pem -out client.csr
//添加扩展SSL属性
echo extendedKeyUsage = clientAuth > extfile.cnf

//使用自己的CA对CSR签名
sudo openssl x509 -req -days 365 -in client.csr -CA ca.pem -CAkey ca-key.pem -out client-cert.pem -extfile extfile.cnf

//清除client-cert.pem中的密码
sudo openssl rsa -in client-key.pem -out client-key.pem 

//配置Docker使用秘钥
mkdir -p ~/.docker/
cp ca.pem ~/.docker/ca.pem
cp client-key.pem ~/.docker/key.pem
cp client-cert.pem ~/.docker/cert.pem
chmod 0600 ~/.docker/key.pem ~/.docker/cert.pem

//测试连接
sudo docker -H=ip:2376 --tlsverify info