/etc/docker/daemon.json
#应该是daemon.conf
{
"registry-mirrors":["https://amgjn11t.mirror.aliyuncs.com"]
}
#搜索镜像
docker search debian
#拉取debian镜像
docker pull debian
查看docker信息
# 查看docker版本 docker version
# 显示docker系统的信息 docker info
# 日志信息 docker logs
# 故障检查 service docker status
# 启动关闭docker sudo service docker start|stop
查看容器日志
docker logs -f <容器名orID>
docker daemon 日志位置
* CoreOS - journalctl -u docker.service
* Ubuntu(16.04) - journalctl -u docker.service
* Ubuntu(14.04) - /var/log/upstart/docker.log
* Boot2Docker - /var/log/docker.log
* Debian GNU/Linux 8 - journalctl -u docker.service
* Debian GNU/Linux 7 - /var/log/daemon.log
* CentOS 7/RHEL 7 - journalctl -u docker.service
* CentOS - /var/log/daemon.log | grep docker
* Fedora - journalctl -u docker.service
* OpenSuSE - journalctl -u docker.service
* Red Hat Enterprise Linux Server - /var/log/messages | grep docker
* OSX - ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/log/docker.log
journalctl 日志工具使用
# 最后行数的日志 journalctl -n
# 详细信息 journalctl -f
# 本次启动后的所有日志 journalctl -b
# 查看启动记录 journalctl --list-boots
# 查看某次运行过程中的日志 sudo journalctl -b [启动顺序号,或者启动hash]
# 查看记录中指定单元 docker.service 的日志 journalctl -u docker.service
显示可以匹配日志级别
journalctl -F PRIORITY
编码 优先级 严重性
0 emerg 系统不可用
1 alert 必须立即采取措施
2 crit 严重状况
3 err 非严重错误状况
4 warning 警告状况
5 notice 正常但重要的事件
6 info 信息性事件
7 debug 调试级别消息
清理日志数据
#使用 –vacuum-size 选项指定日志的总体体积
sudo journalctl --vacuum-size=1G
使用 –vacuum-time 选项指定日志的总时间占用
sudo journalctl --vacuum-time=1years
docker ps 没有响应 日志查询
# grep 所有容器的config.json
docker logs [conID]
# 确认问题后
# 该config.json 中有该容器1号进程的pid
kill -9 pid
查看容器信息
# 查看当前运行的容器 docker ps
# 查看全部容器 docker ps -a
# 查看全部容器的id和信息 docker ps -a -q
# 查看全部容器占用的空间 docker ps -as
# 查看一个正在运行容器进程,支持 ps 命令参数 docker top
# 查看容器的示例id sudo docker inspect -f '{{.Id}}' [id]
# 检查镜像或者容器的参数,默认返回 JSON 格式 docker inspect
# 返回 ubuntu:14.04 镜像的 docker 版本
docker inspect --format '{{.DockerVersion}}' ubuntu:14.04
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ubuntu:14.04
容器同步命令
# 保存对容器的修改 docker commit
# 保存某个容器成为一个镜像
docker commit -a "user" -m "commit info" [CONTAINER] [imageName]:[imageTag]
# 推送一个容器到中心仓库
docker login --username=[userName] --password=[pwd] [registryURL]
## 建议登录后查看 docker info
docker tag [imageID] [remoteURL]:[imageTag]
docker push [remoteURL]:[imageTag]
# 拉取提交的容器 docker pull [remoteURL]:[imageTag]
# 对比容器的改动 docker diff
# 附加到一个运行的容器上 docker attach
容器操作命令
创建删除容器
# 创建一个容器命名为 test 使用镜像daocloud.io/library/ubuntu
docker create -it --name test daocloud.io/library/ubuntu
# 创建并启动一个容器 名为 test 使用镜像daocloud.io/library/ubuntu
docker run --name test daocloud.io/library/ubuntu
# 删除一个容器 docker rm [容器id]
# 删除所有容器 docker rm `docker ps -a -q`
# 根据Dockerfile 构建 docker build -t [image_name] [Dockerfile_path]
# docker容器随系统自启 docker run --restart=always
# 把一个正在运行的容器保存为镜像 docker commit <CONTAIN-ID> <IMAGE-NAME>
#构建镜像 docker build -f ./DockerFile -t debian2:rlzy .
--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签
-f :指定要使用的Dockerfile路径;
-m :设置内存最大值;
--quiet, -q :安静模式,成功后只输出镜像 ID;
--rm :设置镜像成功后删除中间容器;
--shm-size :设置/dev/shm的大小,默认值是64M;
--network: 默认 default。在构建期间设置RUN指令的网络模式
--no-cache :创建镜像的过程不使用缓存;dokcer会缓存已有镜像的镜像层,构建新镜像时,如果某层镜像已经存在就直接使用缓存,不用重新构建。
--build-arg=[] :设置镜像创建时的变量;
--cpu-shares :设置 cpu 使用权重;
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配额;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的内存 id;
--disable-content-trust :忽略校验,默认开启;
容器资源限制参数
# 限制内存最大使用 -m 1024m --memory-swap=1024m
# 限制容器使用CPU --cpuset-cpus="0,1"
启动停止容器等操作
docker start|stop|restart [id]
# 暂停|恢复 某一容器的所有进程 docker pause|unpause [id]
# 杀死一个或多个指定容器进程 docker kill -s KILL [id]
# 停止全部运行的容器 docker stop `docker ps -q`
# 杀掉全部运行的容器 docker kill -s KILL `docker ps -q`
交互式进入容器
sudo docker exec -it {{containerName or containerID}} bash
sudo docker exec -i {{containerName or containerID}} bash
sudo docker exec -t {{containerName or containerID}} bash
sudo docker exec -d {{containerName or containerID}} bash
只用 -i 参数,由于没有分配伪终端,看起来像pipe执行一样。但是执行结果、命令返回值都可以正确获取
只用 -t 参数,则可以看到一个 console 窗口,但是执行命令会发现由于没有获得stdin的输出,无法看到命令执行情况
使用 -it 时,则和我们平常操作 console 界面类似,而且也不会像attach方式因为退出,导致整个容器退出
使用 -d 参数,在后台执行一个进程。如果一个命令需要长时间进程,会很快返回
Docker attach可以attach到一个已经运行的容器的stdin,然后进行命令执行的动作
docker attach {{containerName or containerID}}
查看容器的root用户密码
docker logs <容器名orID> 2>&1 | grep '^User: ' | tail -n1
容器于宿主拷贝文件
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
# 本地文件上传到对应容器的目录
docker cp local.sh [CONTAINERid]:[TagPath]
运行一个新容器,同时为它命名、端口映射、文件夹映射
docker run --name redmine -p 9003:80 -p 9023:22 -d -v /var/redmine/files:/redmine/files -v /var/redmine/mysql:/var/lib/mysql sameersbn/redmine
一个容器连接到另一个容器
docker run -i -t --name sonar -d -link mmysql:db tpires/sonar-server sonar
导入导出容器
# 支持远程文件 .tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz
docker import
# 导出
docker export [id] >~/Downloads/ubuntu_nexus.tar
远程镜像
docker login
docker search
# 搜索处收藏数不小于 3 ,并且能够自动化构建的 django 镜像,并且完整显示镜像描述
docker search -s 3 --automated --no-trunc django
docker pull
# 拉取ubuntu最新的镜像
docker pull ubuntu:latest
# 服务器拉取个人动态,可选择时间区间
docker events
# 拉取个人从 2015/07/20 到 2015/08/08 的个人动态
docker events --since="20150720" --until="20150808"
镜像同步操作
# 标记本地镜像,将其归入某一仓库 docker tag
# 将 ID 为 5db5f84x1261 的容器标记为 mine/lnmp:0.2 镜像
docker tag 5db5f84x1261 mine/lnmp:0.2
# 将镜像推送至远程仓库,默认为 Docker Hub
docker push
本地镜像
# 列出本地所有镜像 docker images
# 本地镜像名为 ubuntu 的所有镜像 docker images ubuntu
# 查看指定镜像的创建历史 docker history [id]
# 本地移除一个或多个指定的镜像 docker rmi
# 移除本地全部镜像 docker rmi `docker images -a -q`
# 指定镜像保存成 tar 归档文件, docker load 的逆操作 docker save
# 将镜像 ubuntu:14.04 保存为 ubuntu14.04.tar 文件
docker save -o ubuntu14.04.tar ubuntu:14.04
# 从 tar 镜像归档中载入镜像, docker save 的逆操作 docker load
# 上面命令的意思是将 ubuntu14.04.tar 文件载入镜像中
docker load -i ubuntu14.04.tar
docker load < /home/save.tar
# 构建自己的镜像
docker build -t <镜像名> <Dockerfile路径>
docker build -t xx/gitlab .
保存后再加载(saved-loaded)的镜像不会丢失提交历史和层,可以回滚
重新查看container的stdout
# 启动top命令,后台运行
$ ID=$(sudo docker run -d ubuntu /usr/bin/top -b)
# 获取正在running的container的输出
$ sudo docker attach $ID
top - 02:05:52 up 3:05, 0 users, load average: 0.01, 0.02, 0.05
Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 373572k total, 355560k used, 18012k free, 27872k buffers
Swap: 786428k total, 0k used, 786428k free, 221740k cached
^C$
$ sudo docker stop $ID
docker run
后台运行(-d)、并暴露端口
docker run -d -p 127.0.0.1:33301:22 centos6-ssh
-a, --attach=[] Attach to STDIN, STDOUT or STDERR 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项
--add-host=[] Add a custom host-to-IP mapping (host:ip)
--blkio-weight=0 Block IO (relative weight), between 10 and 1000
-c, --cpu-shares=0 CPU shares (relative weight)
--cap-add=[] Add Linux capabilities
--cap-drop=[] Drop Linux capabilities
--cgroup-parent= Optional parent cgroup for the container
--cidfile= Write the container ID to the file
--cpu-period=0 Limit CPU CFS (Completely Fair Scheduler) period
--cpu-quota=0 Limit the CPU CFS quota
--cpuset-cpus= CPUs in which to allow execution (0-3, 0,1) 绑定容器到指定CPU运行
--cpuset-mems= MEMs in which to allow execution (0-3, 0,1) 绑定容器到指定MEM运行
-d, --detach=false Run container in background and print container ID 后台运行容器,并返回容器ID
--device=[] Add a host device to the container
--dns=[] Set custom DNS servers 指定容器使用的DNS服务器,默认和宿主一致
--dns-search=[] Set custom DNS search domains 指定容器DNS搜索域名,默认和宿主一致
-e, --env=[] Set environment variables 设置环境变量
--entrypoint= Overwrite the default ENTRYPOINT of the image
--env-file=[] Read in a file of environment variables 从指定文件读入环境变量
--expose=[] Expose a port or a range of ports
-h, --hostname= Container host name 指定容器的hostname
--help=false Print usage
-i, --interactive=false Keep STDIN open even if not attached 以交互模式运行容器,通常与 -t 同时使用
--ipc= IPC namespace to use
-l, --label=[] Set meta data on a container
--label-file=[] Read in a line delimited file of labels
--link=[] Add link to another container
--log-driver= Logging driver for container
--log-opt=[] Log driver options
--lxc-conf=[] Add custom lxc options
-m, --memory= Memory limit
--mac-address= Container MAC address (e.g. 92:d0:c6:0a:29:33)
--memory-swap= Total memory (memory + swap), '-1' to disable swap
--name= Assign a name to the container 为容器指定一个名称
--net=bridge Set the Network mode for the container 指定容器的网络连接类型,支持 bridge/host/none/container:<name|id> 四种类型
--oom-kill-disable=false Disable OOM Killer
-P, --publish-all=false Publish all exposed ports to random ports
-p, --publish=[] Publish a container's port(s) to the host
--pid= PID namespace to use
--privileged=false Give extended privileges to this container
--read-only=false Mount the container's root filesystem as read only
--restart=no Restart policy to apply when a container exits
--rm=false Automatically remove the container when it exits
--security-opt=[] Security Options
--sig-proxy=true Proxy received signals to the process
-t, --tty=false Allocate a pseudo-TTY 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-u, --user= Username or UID (format: <name|uid>[:<group|gid>])
--ulimit=[] Ulimit options
--uts= UTS namespace to use
-v, --volume=[] Bind mount a volume
--volumes-from=[] Mount volumes from the specified container(s)
-w, --workdir= Working directory inside the container
去除每次sudo运行docker命令,需要添加组
# Add the docker group if it doesn't already exist.
$ sudo groupadd docker
#改完后需要重新登陆用户
$ sudo gpasswd -a ${USER} docker
Dockerfile中的EXPOSE、docker run --expose、docker run -p之间的区别
Dockerfile的EXPOSE相当于docker run --expose,提供container之间的端口访问
docker run -p允许container外部主机访问container的端口