- 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