docker常用命令

 /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/d‌ocker.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的端口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值