系统:centos7.8
常用命令
官网文档地址:https://docs.docker.com/get-started/
docker version # 显示版本
docker info # 显示详细信息
docker --help #帮助
curl localhost:8080 # 本机端口测试
docker stats # 查看docker占用cup 内存情况
docker tag 镜像ID 镜像名字[:版本号] # 复制镜像,镜像名字[:版本号]为新镜像
官网命令地址:https://docs.docker.com/engine/reference/run/
一、安装Docker
1、跟新仓库
sudo yum install -y yum-utils
2、设置源
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
3、安装Docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io
4、启动Docker
sudo systemctl start docker
5、通过运行hello-world
映像验证 Docker 引擎是否已正确安装
sudo docker run hello-world
如启动失败,需要配置镜像源地址 /etc/docker/daemon.json (改文件需要新创建)添加内容如下:
{
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}
二、镜像命令
1、查看所有镜像
docker images
2、搜索镜像
docker search mysql
3、下载镜像
cocker pull mysql # 默认最新版
cocker pull mysql:5.7 # 指定版本
4、删除镜像
docker rmi -f e73346asdf # 删除此镜像全部内容,e73346asdf为镜像ID,通过docker images查询
docker rmi -f $(docker images -aq) # 删除全部镜像
docker rmi -f ID1 ID2# 删除多个镜像
三、容器命令
1、先pull个centos系统,基本镜像
docker pull centos
2、创建镜像容器
docker run [可选参数] image
--name Nginx
-d 后台方式运行 # docker run -d centos 通过此方式创建容器PS是看不到的,没有前台应用会自动停止
-it 交互运行并进入
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
docker run -it centos /bin/bash # 终端交互模式,启动并进入容器,进入容器后就是一个基础centOS系统,很多命令不完善
docker run -d --name Nginx01 -p 8080:80 nginx # 指定名字,后端运行
docker run -it --rm centos # 用完就删除,一般用于测试
3、终端在容器时退出容器
exit # 停止并退出
ctrl + P + Q # 快捷键,不停止退出
4、查看运行
docker ps # 查看正在运行的
docker ps -a # 查看正在运行和曾经运行的
docker ps -a -n=3 # 显示最近创建的3个容器
docker ps -aq # 只显示容器编号
5、删除容器
docker rm 容器id # 删除此容器全部内容,不能删除运行中的容器
docker rm -f 容器id # 能删除运行中的容器
docker rm -f $(docker ps -aq) # 删除全部容器
docker ps -a -q|xargs docker rm # 删除全部容器
6、启动(后台运行)、停止容器
docker start 容器ID # 启动
docker restart 容器ID # 重新启动
docker stop 容器ID # 停止容器
docker kill 容器ID # 暴力停止容器
7、查看日志
docker logs
docker logs --help # 查看日志命令帮助
8、查看容器内各进程信息
docker top 容器ID
9、查看容器详细信息
docker inspect 容器ID
10、进入当前正在运行的容器
docker exec -it 容器id /bin/bash # 方式一、终端模式进入容器,进入容器开启新的终端(常用)
docker attach 容器id # 方式二、进入容器正在执行的终端
11、文件拷贝,docker到主机(卷技术可以自动复制)
docker cp bdfb0ad4253a:/home/b.txt . # 主机终端运行此命令,从docker中复制文件b.txt出来到当前文件夹
12、docker可视化工具:1、portainer 2、Rancher
13、容器commit成镜像,提交到本地
docker commit -m="提交信息" -a="作者" 容器ID 目标镜像名:[版本号]
四、数据卷
可以实现容器和主机,容器和容器之间数据共享,双向绑定,实际原理是在主机共享同一个文件。
删掉容器时,挂载的文件还存在主机上
卷常用命令
docker volume --help
docker volume ls # 查看所有本地容器,查出的是容器ID
方式一:挂载
1、数据卷挂载,挂载后可通过docker inspect 查看
docker run -it -v 主机目录地址:容器目录地址 容器名 /bin/bash # 可写多个-v映射多个目录
2、匿名挂载、具名挂载
-v 容器内路径 # 自动挂载(匿名)
-v 卷名:容器内路径 # 指定名字挂载,名字前没有/,有/代表的是路径(具名)
docker volume inspect juming # 查看卷挂载路径mountpoint为主机地址
方式二:Dockerfile
1、创建Dockerfile文件dockerfile01,文件无后缀
FROM centos
VOLUME ["volume01","volume02"] # 创建两个匿名挂载,主机文件夹匿名,容器文件夹为volume01,02
CMD echo "---end---"
CMD /bin/bash
指令都是大写
#表示注释
从上到下执行,每一个指令为一层
FROM # 基础镜像
MAINTAINER # 作者
RUN # 镜像构建时运行
ADD aa.tar.gz /usr # 添加内容 .tar.gz会自动解压
WORKEDIR # 镜像工作目录
VOLUME # 挂载目录
EXPOSE # 保留端口配置
CMD ["ls","-a"]# 运行容器run时运行,run时如果追加命令会替换运行
ENTRYPOINT # 运行容器run时运行,run时叠加运行
ONBUILD # 构建子镜像时触发运行
COPY *.jar /app.jar # 将文件拷贝到镜像中,当前文件的所有jar包放入/app.jar
ENV # 构建时设置环境变量
例:
FROM centos
MAINTAINER linpan
ENV MYPATH /usr
WORKDIR $MYPATH # 进入docker时会直接进入/usr
RUN yum -y install vim
EXPOSE 80
CMD /bin/bash
docker history 镜像ID # 可以查看镜像的创建过程
2、构建镜像,文件名为Dockerfile时不需要-f指定文件路径
docker bulid -f Dockerfile文件路径 -t 镜像名字[:版本] . # .为生成的镜像存放在当前文件夹
3、容器与容器之间数据卷文件共享
docker run --it --name docker02 --volumes-from docker01 镜像ID # 通过--volumes-from继承docker01的数据卷,当docker01容器删除后,docker02的数据卷依然存在
4、发布镜像,在DockerHub注册帐号
1、docker login --help # docker login -u lin
2、docker push 作者名字/镜像名称:版本号
五、docker网络
通过veth-pair虚拟网络桥接,虚拟路由docker0与主机物理网卡通过NAT连接
桥接:主机相当一个桥梁,虚拟一个路由,不同容器通信都是通过主机的虚拟网卡桥接的,容器之间不是直接通信的。
容器和容器,容器和主机默认是可以ping通的
1、容器通过名字ping通
docker run -it --name centos02 --link centos01 centos /bin/bash
# --link centos01可以通过容器名字使01、02ping通
# 02可以ping通01,01如要ping通02需要配置
ping centos01
2、查看网络
docker network --help
docker network ls # 查看所有docker网络
docker network inspect # 查看所有docker网络的详细内容
3、查看centos02 的网络配置是连接到centos01的,修改centos01的配置就可以01ping02
(要实现容器互联,不推荐此方法,推荐自定义网络)
docker exec -it centos02 cat /etc/hosts # hosts下会有ip与名字的绑定信息
自定义网络
docker网络有以下几种方式
a、bridge桥接(默认)
b、none
c、host主机模式:和主机共享网络
d、container容器内网络连通
1、通过创建网络实现容器互通
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
# --driver bridge使用桥接模式,可以不写
# --subnet 192.168.0.0/16 创建子网网段
# --gateway 192.168.0.1 创建网关
# mynet 网络名字
docker network ls # 可以查看到创建的mynet网络
docker network inspect mynet # 可以看到mynet详细信息
2、通过mynet创建容器
docker run -it --name centos02 --net mynet centos /bin/bash
# 不写/bin/bash 不会进入容器命令行
3、通过自定网络创建的容器,容器相互可以通过名字ping通
4、容器连通其他网络
docker network connect --help
docker network connect mynet centos07
# 容器centos07连接到网络mynet,原理是改变 centos07 IP,一个容器两个IP