Docker学习笔记
docker安装(CentOS)
参考官网教程:https://docs.docker.com/engine/install/centos/
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
sudo docker run hello-world //有延迟会卡住等待一会自动下载
按步骤执行即可
如需配置镜像加速源,使用阿里源操作如下:
进入点击管理控制台
按步骤执行上图操作文档即可
初识docker
如安装时配置了阿里源镜像加速则镜像仓库下载地址不再是Docker Hub
- 端口映射左边为宿主机端口,右边为容器端口(容器也有独立ip但外部无法访问,因此通过端口映射实现外部交互)
- 环境变量参数可访问Docker Hub官网查询具体软件对应的Environment Variables
- 完整的镜像名字格式为:Repository:Tag(镜像名:版本号),上述案例无版本号默认下载最新版本
常见命令
- docker pull:下载镜像(不运行)
- docker push:推送镜像(一般是推送私服仓库)
- docker images:查看本地所有镜像
- docker rmi:删除镜像
- docker run:运行镜像并生成容器(如本地无镜像则自动执行docker pull下载,注意:每次运行都生成新容器)
- docker stop:暂停容器(容器还存在只是停了)
- docker start:启动停止的容器(不会生成新容器)
- docker ps:查看所有正在运行的容器(加 -a 查看所有容器)
- docker rm:删除容器
- docker logs:查看容器日志
- docker exec:进入容器(可操作容器文件和linux系统一样)
- docker bulid:将dockerfile文件构建为本地镜像
- docker save:将本地镜像打包成文件(可传给其他人docker load生成本地镜像)
- docker load:将docker文件加载为本地镜像
- docker save和docker load一般不适用而是使用docker push上镜像仓库供他人docker pull下载
- docker inspect:查看容器详情
数据卷挂载
数据卷是为了方便操作容器内文件,或者方便迁移容器产生的数据
数据卷挂载以后形成双向绑定(即无论修改宿主机还是容器都会同步),数据卷的路径是固定的(var/lib/docker/volumes/)
- 在执行docker run 命令时,使用 -v 数据卷(名称):容器内目录 可以完成数据卷挂载
- 当创建容器时,如果挂在了数据卷且数据卷不存在,会自动创建数据卷(因此都使用docker run -v不会使用 docker volume create命令)
本地目录挂载
本地目录挂载可以理解为自定义路径的数据卷挂载
- 在执行docker run 命令时,使用 -v 本地目录:容器内目录 可以完成本地目录挂载
- 本地目录必须以"/“或”./"开头,如直接以名称开头,会被识别为数据卷而非本地目录
- -v mysql : /var/lib/mysql 会被识别为一个数据卷叫mysql
- -v ./mysql : /var/lib/mysql 会被识别为当前目录下的mysql目录
Dockerfile语法
自定义镜像
- . 没有指定文件名称则要求Dockerfile文件名称必须为Dockerfile
- 命令:docker build -t 镜像名称 Dockerfile目录
容器网络互联
docker0
- 172.17.0.1/16表示一个网段,前两位不动,范围172.17.0.1~172.17.255.255
- 创建的容器默认分配docker0(docker0是个虚拟网卡)网段范围ip,容器之间能够相互ping通
- 由于docker0网段的ip是随机分配的,程序配置文件ip不能随之修改,因此需要创建自定义网络(可通过容器名称指定,docker0只能通过ip指定)
自定义网络
- docker network create创建后也会出现一个和docker0一样的网卡和对应网段,但可以使用容器名称互相ping通
- 调用docker network connect是需要网络已经创建存在,且容器也存在,之后容器会存在两个网络中有两个ip(一个docker0网段的,一个自定义的),可通过创建容器docker run 时 加上 --network 网络名 直接加入网络(但也需要提前create创建网络)
DockerCompose介绍
Docker Compose通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署
- 举例如上图左侧使用docker run 命令启动部署如果有多个相关联的服务,则需要多次执行不同的docker run命令,使用右侧Docker Compose只需要和写配置文件一样再同级下继续填写容器信息,对应的网络等也不需要提前创建,执行yml文件时会自动创建,通过build还可以构建Dockerfile文件(具体语法官网查看)
DockerCompose命令
常用软件安装
mysql5.7
docker run -d --name mysql5.7 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf.d:/etc/mysql/conf.d \
--network=custom-network \
mysql:5.7
nacos
docker run -d --name nacos \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
-e MODE=standalone \
-e MYSQL_SERVICE_HOST=mysql5.7 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e SPRING_DATASOURCE_PLATFORM=mysql \
--network=custom-network \
nacos/nacos-server