Docker学习笔记
文章目录
本篇摘录自黑马程序员的B站教学视频:
黑马程序员Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+DockerCompose项目实战一套搞定
一、快速入门
0、原理
Docker 是一种基于 Linux 内核特性实现的轻量级操作系统级虚拟化技术。
Docker 的核心原理基于 Linux 内核的三大技术:Namespace、Cgroups 和 UnionFS。
- 通过 Namespace 实现了资源的隔离:进程、网络、文件系统等资源,让每个容器都像一个独立的 “微型系统”;
- Cgroups资源控制机制:通过 Cgroups 限制和统计容器的 CPU、内存等资源,防止资源滥用;
- UnionFS实现分层镜像:通过 UnionFS 实现镜像的分层存储,让镜像可以复用、轻量分发。
1、介绍
Docker是快速构建、运行、管理应用的运维工具。
能快速部署项目、以及项目依赖的各种组件。
优点:
传统的部署方式,例如Mysql,需要卸载旧的、下载新的、解压、安装依赖、再安装Mysql,在配置。
容易出现问题:1、命令太多记不住,2、安装步骤太复杂容易出错,3、安装包太多,不知道去哪里下
Docker只需要一条命令即可。
Docker镜像中包含了系统函数库,所以能跨系统运行。
隔离环境:一个虚拟机上可以安装2个MySQL容器,互不干扰,且无需重复下载镜像,相当于下载一个QQ能打开两个QQ登陆。
2、Docker安装
# 1、卸载旧版(如果系统中已存在,\斜杠是换行)
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 2、配置Docker的yum库
yum install -y yum-utils # 安装yum工具
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 配置Docker的yum源
# 注意:此处下载的是centos版本
# 3、安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-comp...
# 4、查看是否安装成功
docker -v # 查看版本,但不代表安装成功
docker images # 查看镜像,报错:docker进程连接不上,因为需要启动docker
# 报错:Cannot connect to the Docker daemon at ...
# 5、启动和校验
systemctl start docker # 启动docker
systemctl stop doceker # 停止
systemctl restart docker # 重启
systemctl enable docker # 开机自启动
docker ps # 查看容器,如果不报错,则表示安装自动成功
# 6、配置镜像加速:


3、部署MySQL
# 需先停掉虚拟机中的Mysql,确保Docker已安装,且网络畅通
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql

4、镜像和容器

5、命令解读
docker run -d \ # docker run:创建并运行一个容器,-d:让容器在后台运行(一般都加)
--name mysql \ # 给容器起个名字,必须唯一
-p 3306:3306 \ # 设置端口映射,前面是宿主机ip,后面是mysql的ip(mysql一般都是3306),
#因为容器是隔离的,不能访问,所以可以通过宿主机的3306端口访问mysql的3306,如果有两个mysql,前面的3306就需要改成其他的
-e TZ=Asia/Shanghai \ # -e: 设置环境变量,environment
-e MYSQL_ROOT_PASSWORD=123 \
mysql # 指定运行的镜像的名字,去docker镜像仓库查
镜像命名规范:
镜像一般分两部分: [repository]:[tag]
repository是镜像名,tag是版本号,例如:mysql:5.7
tag不写的话表示默认下载最新版本的

二、Docker基础
1、常见命令


容器状态里的up是指启动时间。
# 命令的帮助文档地址: https://docs.docker.com/engine/reference/commandline/docker/
# Docker:
docker version #查看docker的版本信息
docker info #查看docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令(可查看可选的参数)
# 镜像:
docker images #查看本地主机所有镜像
docker rmi 镜像名 #删除镜像
docker rmi -f 镜像id 镜像id 镜像id #删除多个镜像
# 容器:(以下容器是指name和id都行)
docker exec -it 容器 bash # 进入容器内部 exit退出容器
docker logs 容器 # 日志
docker logs -f 容器 # 日志,不会退出,持续跟踪,调试用,比如有被调用,会新追加
docker rm 容器 # 删除容器,不能删除一个正在运行的容器,方法一:先stop,方法二:
docker rm -f 容器 # 强制删除
docker inspect 容器 # 容器的所有配置信息
1.1 命令别名
常用的命令可以设置简化版别名,方便访问,具体在 /root/.basrc 文件中设置:

添加完后,使用以下命令使其生效:
source /root/.basrc
2、数据卷
数据卷(volume)是一个虚拟目录,是容器目录与宿主机目录之间映射的桥梁。
映射后容器内本质上就没有存储文件,只在宿主机目录下。
例如:nginx容器内只有系统运行需要的系统环境,没有linux命令,进容器操作就会比较麻烦。
也方便迁移数据,例如:redis容器删除后,容器内数据也没了,如果存在宿主机内,即可以保留。。
- /var/lib/docker/volumes 是固定目录,数据卷都存在该文件下。
- 需要在创建容器时就创建数据卷,否则无法创建数据卷

docker volume
docker volume create 数据卷名 # 创建数据卷
docker volume ls # 查看所有数据卷
docker volume inspect 数据卷名 # 查看某个数据卷的详情
docker volume rm VOLUME_NAME [VOLUME_NAME...] # 删除某个数据卷 删除容器后,数据卷还会存在,宿主机目录也存在
docker volume prune # 删除所有未使用的卷
docker run -d \ # 创建容器时就创建数据卷并映射
--name nginx \
-p 80:80 \
-v 数据卷名:容器内目录 # -v即可
nginx
2.1 例题1


Source:宿主机目录,Destination:容器内目录
2.2 匿名卷
容器创建时会自动创建的数据卷,名称特别长,容易出现问题:不方便升级迁移
2.3 目录直接挂载,无需数数据卷
前提:需要在宿主机内提前把目录创建好


3、自定义镜像


分层的好处:
- 1、解耦,能公用某些层
- 2、下载镜像时,前两层若发现一样,就可以不用重新下载,如下图:

3.1 Dockerfile




3.2 从已经创建的容器中更新镜像
从 docker 镜像仓库中下载的镜像不能满足我们的需求时,可以通过两种方式对镜像进行更改:
1、使用 Dockerfile 指令来创建一个新的镜像
2、从已经创建的容器中更新镜像,并且提交这个镜像
更新镜像步骤:
1、先需要使用镜像来创建一个容器
docker run -t -i ubuntu:15.10 /bin/bash
2、 在运行的容器内使用 apt-get update 命令进行更新
3、exit 命令来退出这个容器
4、通过命令 docker commit 来提交容器副本
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
-m: 提交的描述信息
-a: 指定镜像作者
e218edb10161:容器 ID
runoob/ubuntu:v2: 指定要创建的目标镜像名
4、容器网络

容器之间是如何访问的呢?因为容器有相同网关gateway,在同一个网段:(一个容器内ping另一个容器ip是能通的)


4.1 网络命令
加入自定义网络的容器才可以通过容器名互相访问;
加入默认网桥的不能通过容器名访问,可以通过ip;
只有加入到同一网络的容器才能互相访问
docker network create 网络名 # 创建一个网络,ip addr可以看到网络被创建
docker network ls # 查看所有网络
docker network rm # 删除指定网络
docker network prune # 清除未使用的网络
docker network connect 网络名 容器名 # 使指定容器连接加入某网络,docker inspect 容器名---可以看到networks下存在新网络
docker network disconnect # 使指定容器连接离开某网络
docker network inspect 网络名 # 查看网络详细信息
三、项目部署
1、部署Java应用
将java项目打包为镜像并部署
2、部署前端
3、Docker Compose
Docker Compose通过一个单独的docker-compose.yml模版文件(YAML 格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。



3.1 命令
# docker compose的命令格式如下:
docker compose [OPTIONS] [COMMAND]

更多推荐



所有评论(0)