Docker 常用命令
docker container(容器相关)
-
1 .
run
运行-
a.
--publish
/-p
开放端口docker container run --publish <expose_port>:<container_port> <image>:<tag>
-
b.
--deatch
/-d
后台运行docker container run --publish <expose_port>:<container_port> -d <image>:<tag>
-
c.
--name
命名containerdocker container run --publish <expose_port>:<container_port> -d --name <custom_name> <image>:<tag>
-
d.
--env
/-e
设置环境变量docker container run --publish <expose_port>:<container_port> -d --env <env_key>=<env_value> --name <custom_name> <image>:<tag>
-
e.
-it
进入容器交互环境,实际上是-i
和-t
的组合,下面语句会在运行container后,执行<command_to_exec> 命令。例如可以替换<command_to_exec>为bash,则会启动后进入bash交互环境,即容器内部的Linux环境,若需要退出,则执行exit
退出,注意此时容器也会退出。docker container run -it --name <custom_name> <image>:<tag> <command_to_exec>
- f.
--network
设置网络。Docker本身有自己的虚拟网络,通过该命令,可以指定虚拟网络,也可以指定直接通过NAT使用host网络,如:--network <custom_network_name>
-
g.
-v
绑定数据卷,docker container run -v <volume_name>:<path_in_docker> <image>:<tag> <command_to_exec>
-
h.
-v
绑定磁盘数据卷docker container run -v <path_in_local_mount>:<path_in_docker> <image>:<tag> <command_to_exec> #path_in_local_mount 可以使用$(pwd)使用shell命令执行后的结果[PS:以此类推,其他语法处也可以使用]
-
-
2 .
ls
container列表-
a. 显示运行中的container
docker container ls
-
b. 显示所有container
docker container ls -a
-
-
3 .
rm
删除container-
a. 删除指定container
#按照containId删除 docker container rm <containerID> #按照名称删除 docker container rm name
-
b.
-f
强制删除(可删除运行中的container)#按照containId强制删除 docker container rm -f <containerID> #按照名称强制删除 docker container rm -f name
-
-
4 .
top
查询容器中的进程- a.查询容器中的进程
-
b.
#查询指定containerID的Container进程详情 docker container top <containID> #查询指定name的Container进程详情 docker container top <name>
-
5 .
inspect
查询容器的配置详情- a. 返回形式为json结构,不返回活动中的容器和进行中的容器状态
-
b.
#查询指定containerID的Container配置详情 docker container inspect <containID> #查询指定name的Container配置详情 docker container tinspectop <name>
-
c.查看指定docker内网ip
docker container insepct --format '{{.NetworkSettings.IPAddress}}' <name>
-
6 .
stats
查询所有容器的状态-
a.实时返回container的运行状态,不显示容器名称,只显示容器ID
docker container stats
-
b.
#查询指定containerID的Container配置详情 docker container stats <containID> #查询指定name的Container配置详情 docker container stats <name>
-
-
7 .
exec
在container中执行命令- a . 当使用这种方式执行命令时,使用
exit
会退出容器,但是容器不会停止 -
b .
docker container exec -it <container_name> <command_to_exec>
- a . 当使用这种方式执行命令时,使用
- 8 .
start
和stop
:启动/停止容器 -
9 .
port
查看容器端口映射#查询指定containerID的端口映射 docker container port <containerID> #查询指定name的Container的端口映射 docker container port <name>
docker network
-
1 .
ls
显示所有网络- a.默认网络为
bridge
或者docker0
,与host以NAT形式通讯 - b.
host
网络是跳过docker的虚拟网络,直连到主机网络,这种方式牺牲了容器的安全性 - c.
none
网络是在容器中移除了eth0
只剩下localhost
网络接口
docker network ls
- a.默认网络为
-
2 .
inspect
查看网络具体信息- a.以Json形式返回具体的网络信息,其中
IPAM
显示驱动名称,网关和网段 - b.
Containers
显示连接到该网络的Container信息以为IP地址
docker network inspect <network_name>
- a.以Json形式返回具体的网络信息,其中
-
3 .
create
创建网络a.创建网络时默认使用
bridge
驱动,在创建的时候也可以指定第三方驱动来创建含有特定驱动的网络,如weave
驱动
b.此命令还有其他选项可以在创建时指定,如:ip等,具体查看help即可#创建默认驱动的网络 docker network create <custom_network_name> #创建指定驱动的网络 docker network create --driver <driver_name> <custom_network_name> #创建可互相通讯的network docker network create --driver overlay <custom_network_name>
-
4 .
connect
连接指定网络到容器docker network connect <network_id> <container_id>
-
5 .
disconnect
取消连接指定网络到容器docker network disconnect <network_id> <container_id>
- 6 . 运行时指定需要暴露的端口,这样能保护docker内部的端口,只能在虚拟网络里访问,外部可访问的只有暴露出的端口
docker machine
- 1.用于创建docker虚拟机,必须同时安装 virtualbox才能使用
- 2.也可以使用在下网站创建docker集群:https://labs.play-with-docker...,只能活跃4H
-
3.也可以使用云服务例如:https://www.digitalocean.com
#创建虚拟机 docker-machine create <node_name> #ssh连接 docker-machine ssh <node_name> #查看虚拟机环境变量 docker-machine env <node_name>
Docker Images
Dockerfile
# NOTE: this example is taken from the default Dockerfile for the official nginx Docker Hub Repo
# https://hub.docker.com/_/nginx/
# NOTE: This file is slightly different than the video, because nginx versions have been updated
# to match the latest standards from docker hub... but it's doing the same thing as the video
# describes
FROM debian:stretch-slim
# all images must have a FROM
# usually from a minimal Linux distribution like debian or (even better) alpine
# if you truly want to start with an empty container, use FROM scratch
ENV NGINX_VERSION 1.13.6-1~stretch
ENV NJS_VERSION 1.13.6.0.1.14-1~stretch
# optional environment variable that's used in later lines and set as envvar when container is running
RUN apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y gnupg1 \
&& \
NGINX_GPGKEY=573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62; \
found=''; \
for server in \
ha.pool.sks-keyservers.net \
hkp://keyserver.ubuntu.com:80 \
hkp://p80.pool.sks-keyservers.net:80 \
pgp.mit.edu \
; do \
echo "Fetching GPG key $NGINX_GPGKEY from $server"; \
apt-key adv --keyserver "$server" --keyserver-options timeout=10 --recv-keys "$NGINX_GPGKEY" && found=yes && break; \
done; \
test -z "$found" && echo >&2 "error: failed to fetch GPG key $NGINX_GPGKEY" && exit 1; \
apt-get remove --purge -y gnupg1 && apt-get -y --purge autoremove && rm -rf /var/lib/apt/lists/* \
&& echo "deb http://nginx.org/packages/mainline/debian/ stretch nginx" >> /etc/apt/sources.list \
&& apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y \
nginx=${NGINX_VERSION} \
nginx-module-xslt=${NGINX_VERSION} \
nginx-module-geoip=${NGINX_VERSION} \
nginx-module-image-filter=${NGINX_VERSION} \
nginx-module-njs=${NJS_VERSION} \
gettext-base \
&& rm -rf /var/lib/apt/lists/*
# optional commands to run at shell inside container at build time
# this one adds package repo for nginx from nginx.org and installs it
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
# forward request and error logs to docker log collector
EXPOSE 80 443
# expose these ports on the docker virtual network
# you still need to use -p or -P to open/forward these ports on host
CMD ["nginx", "-g", "daemon off;"]
# required: run this command when container is launched
# only one CMD allowed, so if there are multiple, last one wins
docker image
- 1 .
build
新建Image
在有Dockerfile的目录下执行,新建Image命令
在创建Image的时候,会按照命令一层一层的写入,建议在dockerfile中将不经常变化的层信息写在上面,把经常修改的层写在下面,这样当再次床架image时,会根据SHA1判断并使用相同的层,以便于提高创建image效率
docker image build -t <image_name> <image_dir>
-
2 .
history
查看image的layers历史信息该命令查看image的层历史
docker image history <image>
-
3 .
inspect
查看image详细信息,包含所有的层信息docker image inspect <image>
-
4 .
ls
查看所有DockerImage列表docker image inspect <image>
-
5 .
tag
修改image的tagdocker image tag <image>:<source_tag> <image>:<target_tag>
-
6 .
pull
从DockerHub拉取imagedocker image pull <image>:<tag>
-
7 .
push
推送image到DockerHubdocker image push <image>:<tag>
docker volume
-
1.
ls
查询所有volume列表docker volume ls
-
2.
rm
删除指定volumedocker volume rm <volume_name>
-
3.
inspect
查询volume信息docker volume inspect <volume_name>
-
4.
prune
删除所有未使用的本地数据卷docker volume inspect <volume_name>
-
5.
create
创建数据卷docker volume create <volume_name>
Docker Swarm
- 结构
docker swarm
-
1 .
init
初始化Docker Swarm 单节点,默认为Leader-Manager,会创建Token供其他Swarm加入(join)时使用,创建Raft协议docker swarm init
-
2 .
init --advertise-addr
当创建swarm时指定的host名称对应多个ip地址时,需要具体指定哪个IPdocker swarm init --advertise-addr <IP>
-
3 .
join
当创建玩一个swarm节点时,系统会提示如何加入节点docker swarm join --token <token> <IP>:<PORT>
-
4 .
join-token
获取Join时需要的tokendocker swarm join-token manager
docker node
-
1 .
ls
查看Swarm中的Node列表只有Swarm-Leader才能使用,Worker不支持
docker node ls
-
2 .
inspect
查看Swarm中的Node详情docker node inspect <node_id>
-
3 .
ps
查看Swarm中的Node状态#查看node整体信息 docker node ps #查看指定node的信息 docker node ps <node_name>
-
4 .
rm
删除Swarm中的Nodedocker node rm <node_id>
-
5 .
update
更新swarm节点docker node update --<update_command> <param> <node_name> #更新接的角色为Manager docker node update --role manager <node_name>
docker service
- 用于替代
docker run
- 创建后,如果使用
docker container rm
命令删除某个container,则Swarm会自动创建一个新的container,以保证整体节点数量
-
1 .
create
创建swarm节点#创建单节点 docker service create <image> #创建多节点 docker service create --replicas <node_number> <image>
docker 17.10 之后,组要指定
--detach true
表示后台运行,若不指定该参数会同步显示所有执行过程 -
2 .
ls
查看创建的service信息docker service ls
-
3 .
ps
查看service的任务信息或者Container信息docker service ps <service_id/service_name>
-
4 .
update
更新service相比于
docker update
,docker service update
提供更多更新操作,可用于更新docker配置docker service update <service_id/service_name> <new_command>
docker 17.10 之后,组要指定
--detach true
表示后台运行,若不指定该参数会同步显示所有执行过程 -
5 .
rm
删除servicedocker service rm <service_id/service_name>
其他
- 1 . docker swarm 自带loadbalancer,但是是无状态的loadbalancer,不支持session,cookie等机制,可以在docker swarm 集群前置Nginx来实现真正的负载均衡
- LoadBalancer
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。