Docker的使用及常用命令
2015年01月13日


一、docker run 常用参数说明

docker run -p 5000:8080 org/proj:1.0

小p:暴露指定端口

docker run -d -P training/webapp python app.py

大P:暴露所有端口,映射到主机的随机端口上。

-d:后台运行

docker run --name mynginx -d nginx:latest

--name:给容器命名

docker run -ti --add-host db-static:86.75.30.9 ubuntu cat /etc/hosts

--add-host:添加容器内的host-ip的映射

docker run -it --rm ubuntu:16.04 bash

-i:保持STDIN输出

-t:打开终端pseudo-TTY

-it:交互模式启动一个容器

--rm:运行结束后立即删除该容器,--rm 和 -d不能共用

docker run -d --webdemo -p 8899:8080 --privileged=true -v /home/admin/webapp/:/usr/local/tomcat/webapps tomcat:8.0

--:什么意思?等价于“--name”???

--privileged:使Docker拥有访问主机所有设备的权限

-v:绑定数据卷(":"之前是宿主机文件夹,之后是容器需共享的文件夹)


具体参见:

$ docker run --help


如何临时退出一个正在交互的容器的终端,而不终止它?

按Ctrl+p,后按Ctrl+q,如果按Ctrl+c会使容器内的应用进程终止,进而会使容器终止。


如何控制容器占用系统资源(CPU,内存)的份额?


在使用docker create命令创建容器或使用docker run 创建并运行容器的时候,可以使用-c|–cpu-shares[=0]参数来调整同期使用CPU的权重,使用-m|–memory参数来调整容器使用内存的大小。


二、其他常用命令


查看本地镜像

docker images


# 删除所有镜像

docker rmi $(docker images | grep -v RESPOSITORY | awk '{print $3}')


# 显示全部容器

docker ps -a

# 显示当前运行的容器

docker ps


docker start

# 启动一个已经停止的容器

docker start 容器ID


# 重启一个容器

docker restart 容器ID


# 关闭运行中的容器

docker stop 容器ID


# 删除容器

docker rm 容器ID


# 查看所有容器id

docker ps -q

docker ps -a -q


# 删除所有容器

docker rm $(docker ps -a -q) 


杀死所有正在运行的容器: 

docker kill $(docker ps -a -q) 


删除所有停止的容器: 

docker rm $(docker ps -a -q)


进入docker容器内部:

docker exec -it 容器ID/name bash

例如:docker exec -it ba076e2c4aa4 bash


修改了容器的文件,也就是改动了容器的存储层,可以通过 docker diff 命令看到具体的改动。

docker diff 容器ID/name


# 导出容器

docker export 容器ID > xxx.tar


# 把 myimage 镜像保存成 tar 文件

docker save myimage | bzip2 -9 -c> /home/save.tar.bz2

docker save myimage:1.1.0 | gzip > myimage.tar.gz

docker save -o test.tar wurstmeister/test:2.12-2.3.0

# 加载 myimage 镜像

bzip2 -d -c < /home/save.tar.bz2 | docker load

docker load < myimage.tar.gz

docker load -i test.tar


查看镜像、容器、数据卷所占用的空间。

docker system df


#查看容器内的标准输出

docker logs <id/name>


#查看docker容器的底层信息,json格式

docker inspect <id/name>

例如:

docker inspect c80b90e2ad19 | grep -i IP 

docker inspect 85f7f38785d9 | grep ark.ip


#查看docker所有网络

docker network ls

#查看docker某个网络详情

docker network inspect vlan702


#查看端口映射

docker port <id/name>


#查看容器挂载的数据卷:

docker inspect -f "" <id/name>


#docker容器和宿主机之前拷贝复制文件

从容器到宿主机

docker cp 容器标识:/opt/source /target

从宿主机到容器

docker cp /target 容器标识:/opt/source


三、构建Docker镜像


# 构建容器

docker build -t 镜像名称 .     # 后面的. 指的是当前文件夹 (其实是Dockerfile存放的文件夹)


# 建立映像文件。–rm 选项是告诉Docker,在构建完成后删除临时的Container,Dockerfile的每一行指令都会创建一个临时的Container,一般这些临时生成的Container是不需要的

docker build --rm=true -t loen/lamp .


# 查看历史

docker history 镜像ID

# 格式化显示

docker history 镜像ID --format "table=\n" --no-trunc


下面用一个实际的例子来说明:

安装nodejs 和 vue环境,然后运行 vue serve,访问http://localhost:8080/,显示App.vue的内容。

参见这个例子:

https://cli.vuejs.org/guide/prototyping.html


构建步骤一:

FROM node

RUN npm install -g @vue/cli && npm install -g @vue/cli-service-global

CMD ["./usr/local/bin/vue", "--version"]


构建步骤二:

FROM vue-serve

RUN mkdir /app

WORKDIR /app

COPY docker-entrypoint.sh /app/

ONBUILD COPY . /app/

ENTRYPOINT ["/app/docker-entrypoint.sh"]


构建步骤三:

FROM vue-run



附:docker run --help

[bargee@barge cluster]$ docker run --help

Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Run a command in a new container

  -a, --attach=[]                 Attach to STDIN, STDOUT or STDERR
  --add-host=[]                   Add a custom host-to-IP mapping (host:ip)
  --blkio-weight                  Block IO (relative weight), between 10 and 1000
  --blkio-weight-device=[]        Block IO weight (relative device weight)
  --cpu-shares                    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                    Limit CPU CFS (Completely Fair Scheduler) period
  --cpu-quota                     Limit CPU CFS (Completely Fair Scheduler) quota
  --cpuset-cpus                   CPUs in which to allow execution (0-3, 0,1)
  --cpuset-mems                   MEMs in which to allow execution (0-3, 0,1)
  -d, --detach                    Run container in background and print container ID
  --detach-keys                   Override the key sequence for detaching a container
  --device=[]                     Add a host device to the container
  --device-read-bps=[]            Limit read rate (bytes per second) from a device
  --device-read-iops=[]           Limit read rate (IO per second) from a device
  --device-write-bps=[]           Limit write rate (bytes per second) to a device
  --device-write-iops=[]          Limit write rate (IO per second) to a device
  --disable-content-trust=true    Skip image verification
  --dns=[]                        Set custom DNS servers
  --dns-opt=[]                    Set DNS options
  --dns-search=[]                 Set custom DNS search domains
  -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
  --group-add=[]                  Add additional groups to join
  -h, --hostname                  Container host name
  --help                          Print usage
  -i, --interactive               Keep STDIN open even if not attached
  --ip                            Container IPv4 address (e.g. 172.30.100.104)
  --ip6                           Container IPv6 address (e.g. 2001:db8::33)
  --ipc                           IPC namespace to use
  --isolation                     Container isolation level
  --kernel-memory                 Kernel memory limit
  -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
  -m, --memory                    Memory limit
  --mac-address                   Container MAC address (e.g. 92:d0:c6:0a:29:33)
  --memory-reservation            Memory soft limit
  --memory-swap                   Swap limit equal to memory plus swap: '-1' to enable unlimited swap
  --memory-swappiness=-1          Tune container memory swappiness (0 to 100)
  --name                          Assign a name to the container
  --net=default                   Connect a container to a network
  --net-alias=[]                  Add network-scoped alias for the container
  --oom-kill-disable              Disable OOM Killer
  --oom-score-adj                 Tune host's OOM preferences (-1000 to 1000)
  -P, --publish-all               Publish all exposed ports to random ports
  -p, --publish=[]                Publish a container's port(s) to the host
  --pid                           PID namespace to use
  --privileged                    Give extended privileges to this container
  --read-only                     Mount the container's root filesystem as read only
  --restart=no                    Restart policy to apply when a container exits
  --rm                            Automatically remove the container when it exits
  --security-opt=[]               Security Options
  --shm-size                      Size of /dev/shm, default value is 64MB
  --sig-proxy=true                Proxy received signals to the process
  --stop-signal=SIGTERM           Signal to stop a container, SIGTERM by default
  -t, --tty                       Allocate a pseudo-TTY
  --tmpfs=[]                      Mount a tmpfs directory
  -u, --user                      Username or UID (format: <name|uid>[:<group|gid>])
  --ulimit=[]                     Ulimit options
  --uts                           UTS namespace to use
  -v, --volume=[]                 Bind mount a volume
  --volume-driver                 Optional volume driver for the container
  --volumes-from=[]               Mount volumes from the specified container(s)
  -w, --workdir                   Working directory inside the container