Docker安装及常用命令整理
- 1、Docker简介
- 2、Docker环境安装
- 2.1、移除以前docker相关包
- 2.2、配置yum源
- 2.3、安装docker
- 2.4、启动
- 2.5、配置加速
- 3、Docker镜像常用命令
- 3.1、搜索镜像
- 3.2、下载镜像
- 3.3、列出镜像
- 3.4、删除镜像
- 3.5、打包镜像
- 3.6、导入镜像
- 3.7、容器打包
- 3.8、导入容器
- 3.9、推送镜像
- 3.10、新建并启动容器
- 3.11、列出容器
- 3.12、停止容器
- 3.13、强制停止容器
- 3.14、启动容器
- 3.15、进入容器
- 3.16、退出容器
- 3.17、删除容器
- 3.18、查看容器的日志
- 3.19、修改容器的启动方式
- 3.20、同步宿主机时间到容器
- 3.21、查看容器资源占用状况
- 3.22、查看容器磁盘使用情况
- 3.23、查看所有网络
- 3.24、创建外部网络
- 3.25、创建外部网络
- 3.26、查看容器/镜像的元数据
- 3.27、拷贝文件
- 4、容器状态有7种
- 5、所有网路模式
1、Docker简介
Docker是一个开源的应用容器引擎,让开发者可以打包应用及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上。使用Docker可以更方便地打包、测试以及部署应用程序。
2、Docker环境安装
2.1、移除以前docker相关包
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.2、配置yum源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.3、安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
2.4、启动
systemctl enable docker --now
2.5、配置加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://5cn52dc7.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3、Docker镜像常用命令
3.1、搜索镜像
docker search tomcat
3.2、下载镜像
docker pull tomcat
3.3、列出镜像
docker images
3.4、删除镜像
- 指定名称删除镜像:
docker rmi tomcat
- 指定名称删除镜像(强制):
docker rmi -f tomcat
- 删除所有没有引用的镜像:
docker rmi `docker images | grep none | awk '{print $3}'`
- 强制删除所有镜像:
docker rmi -f $(docker images)
3.5、打包镜像
docker save -o /root/xxx.tar <name>
3.6、导入镜像
docker load -i /root/xxx.tar
3.7、容器打包
docker export -o /root/xx.tar <name>
3.8、导入容器
docker import xx.tar <name>:latest
3.9、推送镜像
# 登录Docker Hub
docker login
# 给本地镜像打标签为远程仓库名称
docker tag consul:latest linshengqian/consul:v1.0
# 推送到远程仓库
docker push linshengqian/consul:v1.0
3.10、新建并启动容器
docker run -p 80:80 --name nginx \
-e TZ="Asia/Shanghai" \
-v /mydata/nginx/html:/usr/share/nginx/html \
-d nginx:1.17.0
- –name=“Name” :指定容器名称,之后可以通过容器名称来操作容器;
- -e:设置容器的环境变量,这里设置的是时区;
- -v:将宿主机上的文件挂载到宿主机上,格式为:宿主机文件目录:容器文件目录;
- -d:表示容器以后台方式运行。
- –network :指定网络
- -P: 随机端口映射(大写P)
- -p:将宿主机和容器端口进行映射,指定端口映射,格式为:宿主机端口:容器端口,(小写p)
- ip:hostPort:containerPort
- ip::containerPort
- hostPort:containerPort (常用)
- containerPort
3.11、列出容器
- 列出运行中的容器:
docker ps
- 列出所有容器,包括未运行的:
-a
docker ps -a
- 列出最近创建的容器:
-l
docker ps -l
- 运行中的容器总的文件大小:
-s
docker ps -s
- 根据条件过滤显示的内容:
-f
docker ps -f name=mysql
3.12、停止容器
$ContainerName
表示容器名称,$ContainerId
表示容器ID,可以使用容器名称的命令,基本也支持使用容器ID:
docker stop $ContainerName(or $ContainerId)
3.13、强制停止容器
docker kill $ContainerName
3.14、启动容器
docker start $ContainerName
3.15、进入容器
- 方法一:
docker attach $ContainerName(or $ContainerId)
attach 直接进入容器启动命令的终端,不会启动新的进程
- 方法二:指定用户进入容器
docker exec -it --user root $ContainerName(or $ContainerId)
exec 是在容器中打开新的终端,并且可以启动新的进程
- 方法三:
- 先查询出容器的
pid
:
docker inspect --format "{{.State.Pid}}" $ContainerName
- 根据容器的pid进入容器:
nsenter --target "$pid" --mount --uts --ipc --net --pid
3.16、退出容器
exit # 容器停止退出
ctrl+P+Q # 容器不停止退出
3.17、删除容器
- 删除指定容器:
docker rm $ContainerName
- 强制删除指定容器:
docker rm -f $ContainerName
- 强制删除所有容器;
docker rm -f $(docker ps -a -q)
- 按名称通配符删除容器,比如删除以名称
redis-
开头的容器:
docker rm `docker ps -a | grep redis-* | awk '{print $1}'`
- 删除所有关闭的容器:
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
3.18、查看容器的日志
- 查看容器产生的全部日志:
docker logs $ContainerName
- 动态查看容器产生的日志:
docker logs -f $ContainerName
3.19、修改容器的启动方式
- 将容器启动方式改为always
docker update --restart always $ContainerName
或
docker container update --restart=always $ContainerName
3.20、同步宿主机时间到容器
docker cp /etc/localtime $ContainerName:/etc/
3.21、查看容器资源占用状况
- 查看指定容器资源占用状况,比如cpu、内存、网络、io状态:
docker stats $ContainerName
- 查看所有容器资源占用情况:
docker stats -a
3.22、查看容器磁盘使用情况
docker system df
3.23、查看所有网络
docker network ls
3.24、创建外部网络
docker network create -d bridge $NetworkName
3.25、创建外部网络
docker inspect $NetworkName
3.26、查看容器/镜像的元数据
docker inspect $ContainerName(or $ContainerId)
3.27、拷贝文件
- 容器到宿主机
docker cp $ContainerName(or $ContainerId):/home/f1 /home
- 宿主机到容器
docker cp /home/licence.txt $ContainerName(or $ContainerId):/home
4、容器状态有7种
- created(已创建)
- restarting(重启中)
- running(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
5、所有网路模式
网络模式 | 配置 | 说明 |
bridge模 式 | –net=bridge | 默认值,在Docker网桥docker0上为容器创建新的网络 栈 |
none模式 | –net=none | 不配置网络,用户可以稍后进入容器,自行配置 |
container 模式 | – net=container:name/id | 容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace |
host模式 | –net=host | 容器和宿主机共享Network namespace |
host模式 | –net=自定义网络 | 用户自己使用network相关命令定义网络,创建容器的 时候可以指定为自己定义的网络 |
其中有些命令选项只有在 Docker 服务启动的时候才能配置,而且不能马上生效。
-
-b BRIDGE
或--bridge=BRIDGE
指定容器挂载的网桥 -
--bip=CIDR
定制 docker0 的掩码 -
-H SOCKET
或--host=SOCKET
Docker 服务端接收命令的通道 -
--icc=true|false
是否支持容器之间进行通信 -
--ip-forward=true|false
请看下文容器之间的通信 -
--iptables=true|false
是否允许 Docker 添加 iptables 规则 -
--mtu=BYTES
容器网络中的 MTU
下面2个命令选项既可以在启动服务时指定,也可以在启动容器时指定。在 Docker 服务启动的时候指定则会成为默认值,后面执行 docker run
时可以覆盖设置的默认值。
-
--dns=IP_ADDRESS
使用指定的DNS服务器 -
--dns-search=DOMAIN
指定DNS搜索域
最后这些选项只有在 docker run
执行时使用,因为它是针对容器的特性内容。
-h HOSTNAME
或--hostname=HOSTNAME
配置容器主机名--link=CONTAINER_NAME:ALIAS
添加到另一个容器的连接--net=bridge|none|container:NAME_or_ID|host
配置容器的桥接模式-p SPEC
或--publish=SPEC
映射容器端口到宿主主机-P or --publish-all=true|false
映射容器所有端口到宿主主机
在 docker 网络中,有三个比较核心的概念:沙盒(Sandbox)、网络(Network)、端点(Endpoint)。
- 沙盒提供了容器的虚拟网络栈,也就是端口套接字、IP 路由表、防火墙等的内容。隔离了容器网络与宿主机网络,形成了完全独立的容器网络环境。
- 网络可以理解为 docker 内部的虚拟子网,网络内的参与者相互可见并能够进行通讯。docker 的这种虚拟网络也是于宿主机网络存在隔离关系的,其目的主要是形成容器间的安全通讯环境。
- 端点是位于容器或网络隔离墙之上的洞,其主要目的是形成一个可以控制的突破封闭的网络环境的出入口。当容器的端点与网络的端点形成配对后,就如同在这两者之间搭建了桥梁,就能够进行数据传输了。