目录
技术基础
- 具备一定的 Linux 基础(cd 切换目录、mkdir 创建文件夹)
- 集群开发(企业开发)Dev(开发)Ops(运维)
- docker官网
Docker简介
- 运行容器;开辟端口;
- 基于网络
- 通过 Docker 可以快速进行项目的运行,不用考虑环境部署问题
- 集装箱 — 单独封装起来 — 隔离的思想
- Docker 极大的利用内存资源
- 内核级别的虚拟化技术
- 轻量级,一种容器的虚拟化技术,容器化技术、虚拟化技术
- 基于 go 语言开发
Docker 2010年 出现
2013 年 Docker 开源
以前的虚拟机(虚拟化技术)都是去虚拟一套硬件,是一个完整的操作系统;而容器化技术是简易的操作系统
镜像加速配置
Docker安装
- 下载地址
- 查看
CentOS
版本:cat /etc/redhat-release
先卸载旧版本 docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装 Docker 依赖包
yum install -y yum-utils
- 由图可知,系统已经安装了该依赖包的最新版
设置镜像仓库
- 国外镜像太慢,我这里用的是国内
阿里云的镜像
- 阿里云镜像:速度快…
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
docker-ce 社区版的docker (ce —> community 社区)
docker-ee 企业版的docker (ee —> enterprise 企业)
更新 yum
yum makecache fast
安装 Docker 引擎 和 容器
yum install docker-ce docker-ce-cli containerd.io
- 安装完成
启动 docker
-
systemctl start docker
-
查看 docker 是否安装成功
docker version
-
docker run hello-world
阿里云镜像加速
- 登录 阿里云
- 找到容器服务
- 找到
镜像加速器
- 选择
CentOS
版本 进行加速, 或选择其他系统
CentOS 配置镜像加速器
mkdir -p /etc/docker
新建一个目录docker
tee /etc/docker/daemon.json <<-'EOF'
新建一个daemon.json
文件, 添加内容- daemon重启
- docker 重启
卸载 Docker 引擎 和 容器
systemctl stop docker
-
yum remove docker-ce docker-ce-cli containerd.io
-
删除 Docker 引擎 和 容器 的目录
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
Docker 基本组成
- 由 镜像(image)、容器( container )和仓库 (repository) 组成
- 默认工作路径:
/var/lib/docker
Docker 常用命令
- Docker 常用命令:镜像命令、容器命令、操作命令…
/
代表 根目录,/home 代表普通用户的家 /root 代表管理员用户的家 ~ 代表家(可能是/home、/root)
Docker 是 C/S 结构
docker --version/-v # 查看 docker 版本
docker info # 查看docker 详细信息
docker command --help # 帮助命令
镜像命令
查看镜像:docker images
docker images -q 只显示镜像id
docker images -a 列出所有镜像
docker search mysql 搜索镜像mysql
docker rmi -f 镜像id/镜像名称 # 删除镜像, 删除多个镜像,使用空格隔开
docker search mysql --filter=STARS=3000 搜索出 stars > 3000 的镜像 镜像过滤
下载镜像:docker pull 镜像名称(默认下载最新的镜像 Using default tag: latest)
docker pull mysql:5.7 # 指定镜像版本下载
- 镜像采用 分层下载模式
- 删除所有镜像:docker rmi -f $(docker images -aq)
- 提交镜像到仓库
docker commit -m message
查看镜像
docker images
容器命令
- 容器是通过镜像来创建,先从仓库找到镜像,根据镜像创建容器
- 容器的操作:启动、停止、删除
- 查看容器元数据
docker inspect NAME|ID
- 运行并进入容器
-
停止当前容器并退出
exit
-
当遇到上图中的情况,需要退出容器,但是不停止容器:
Ctrl + P + Q
执行后出现如下界面:
- 查看当前正在运行的容器:docker ps
- 列出当前正在运行的容器 + 历史运行过的容器:docker ps -a
- 只显示当前所有容器的容器ID:docker ps -aq
- 删除容器:docker rm 容器id/容器name
- 删除所有容器: docker rm -f $(docker ps -aq)
- docker ps -a -q|xargs docker rm 删除所有容器
使用
xargs
命令,可以通过管道|
接受字符串,并将接收到的字符串通过某个字符进行分割成许多参数(默认情况下是通过空格分割) 然后将参数传递给其后面的命令,作为后面命令的命令行参数执行
-
docker start 容器id # 启动容器
-
docker restart 容器id # 重启容器
-
docker stop 容器id # 停止容器:
docker stop [OPTIONS] CONTAINER [CONTAINER...]
-
杀死容器:docker kill 容器id
-
后台启动容器, 并为容器命名:docker run -d --name 自定义容器名称 镜像id
- 查看某个容器的日志:docker logs 容器name/容器id
- 进入当前正在运行的容器:docker exec -it 容器id/容器名称name /bin/bash
进入正在运行的容器的两种方式:exec 、attach
attach 在当前正在运行的终端打开容器,而 exec 是在新的终端中打开容器
-p 宿主机端口: 容器端口 — > 用来进行端口的映射
- 执行docker run 命令中 -e 参数讲解
- docker run 部分参数讲解 : -it
- docker run 部分参数讲解:–volumes-from
- docker run 部分参数讲解:–link name 连通网络
docker run
操作命令
docker load
与docker save
- 镜像引用
mkdir /test 在根目录下创建
test
目录, 此为绝对路径
touch test 创建文件
test
拷贝容器内的文件到容器外:
docker cp 容器ID:filePath 容器外的路径
docker cp 容器id:容器中文件的路径 复制到主机的目标路径
查看服务器指定端口是否可用:
telnet 49.32.587.164 8093
shutdown -h now --立即关机
shutdown -h 10:53 --到10:53关机,如果该时间小于当前时间,则到隔天
shutdown -h +10 --10分钟后自动关机
shutdown -r now --立即重启
shutdown -r +30 ‘The System Will Reboot in 30 Mins’ --30分钟后重启并并发送通知给其它在线用户
echo test
输出test
查看容器的进程信息
ps
或top
docker top 容器ID
查看容器进程信息
查看容器元数据
docker inspect NAME|ID
#
和$
#:管理员登陆显示 $:非管理员登陆显示
测试服务:
curl 服务地址
eg: curl localhost:8080
仓库
- 仓库:用来存放镜像
- Docker 仓库
- 提交 容器
docker commit 容器ID
生成一个镜像
- 查看提交生成的镜像信息
Docker镜像
- Docker镜像
部署 tomcat
- 查看
tomcat
服务器的信息
- 下载
tomcat
镜像并部署 - 下载
tomcat9.0
: docker pull tomcat:9.0
- 启动
tomcat
- 后台启动
tomcat
- 用完即删:
docker run -it --rm tomcat:9.0
-it 以交互方式运行
Ctrl + C 退出程序
- 阉割版
tomcat
操作
- 上图中 复制文件 报错了,修改如下:
- 用户客户端浏览器查看效果
防火墙操作
-
查看已开启的端口 :
firewall-cmd --list-ports
-
开启防火墙 :
systemctl start firewalld
-
查看防火墙状态:
firewall-cmd --state
-
开启端口8080 :
firewall-cmd --zone=public --add-port=8080/tcp --permanent
-
重启防火墙:
firewall-cmd --reload
部署 mysql
- 查看
mysql
信息
- 下载
mysql
镜像
- 实例化一个 mysql镜像的容器mysql_test01,并进入容器中
- 实例化一个 容器,配置环境变量,即为
mysql
的root
用户设置密码
- 进入容器中,查看该镜像mysql在容器中的具体路径
- 在本机使用
SQLyog
工具测试
- 停止
mysql
容器
部署 Nginx
- 下载
Nginx
镜像
- 启动
nginx
- 在谷歌浏览器上测试:
- 查看配置文件的位置
whereis
容器数据卷
- 实现容器的持久化和同步操作!容器间实现数据共享(即多个容器可以共享一个地方的数据)
- 它存在于一个或多个容器中的特定文件或文件夹,这个目录以独立于联合文件系统的形式在宿主机中也存在
- 后期我们只需要去修改自己服务器主机上的目录,它自动就会和我们的容器进行同步,避免我们频繁的切换到容器中进行相关的配置和修改操作
数据卷的使用 volume
- -v 方式挂载
- 使用效果:
- 再来查看一下该容器的元数据信息
挂载: Docker 小白 应该选择 --mount 参数,大佬的 Docker 使用者对 -v 或者 --volume已经很熟悉了,但是推荐使用 --mount 参数
数据卷的挂载方式
- 具名挂载(常用)
- 匿名挂载
卷的管理
docker volume COMMAND
- 查看 卷的详细信息
docker volume inspect VOLUME
DockerFile
- 把项目构建成镜像(镜像的定制)
- 定制每一层所添加的配置、文件,如果我们可以把每一层修改、安装、构建、操作的命令都写入这个文件
- Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建
# 指定基础镜像
FROM 镜像ID
# 拷贝文件
COPY 源文件路径 目标文件路径
# 挂载卷 匿名挂载
VOLUME ["volume_test01"]
CMD echo 'publish dockerfile'
CMD /bin/bash
- 生成镜像
docker build
默认 Dockerfile 文件
- 运行镜像,实例化容器
发布镜像到仓库(阿里云镜像仓库、DockerHub)
注册 dockerhub 账号
命令登录
docker login
上传到远程仓库 push
docker push
docker push helloworldyk/mynode02:1.0
- 登录
dockerhub
仓库查看
阿里云镜像仓库
登录阿里云
创建个人实例
创建命名空间
创建镜像仓库
测试连接
demo1
FROM centos
MAINTAINER yk-ddm<1715858747@qq.com>
ENV MYPATH /usr/local/centos
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 3344
CMD echo $MYPATH
CMD echo "=====end======"
CMD /bin/bash
-f
指定 dockerfile 文件的路径
docker history ...
demo2
FROM centos
MAINTAINER yk-ddm<1715858747@qq.com>
# ADD file targetPath 如果 file 是压缩包,会自动解压
CMD ["ls", "-l"]
ENTRYPOINT 和 CMD 区别
- 在执行 docker run 命令 时
COMMAND
参数是否可以追加,前者可以,后者不可以
Docker 网络原理
何为 Docker0
- 桥接模式(bridge)搭建的网卡
虚拟设备间的通信
- 通过
evth-pair 技术
实现,桥梁;接口;实现容器间的通信 Docker0
network
- 创建自定义网络
docker network create -d bridge --gateway 192.168.0.1 --subnet 192.168.0.0/16 net_test
网络连通
docker network connect
VSCode 整合Docker
Docker Compose
- 服务管理, 一次性管理, 集群的编排管理
- 大量的容器管理:容器定义、运行、停止…
- 定义一个或多个容器的工具
YAML file
: docker-compose.yml
安装
download the current stable release of Docker Compose:
下载当前发布的稳定版本Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
国内下载方式:
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
授权
Apply executable permissions to the binary:
为 该二进制文件应用可执行权限
sudo chmod +x /usr/local/bin/docker-compose
查看版本
docker-compose version
Get started with Docker Compose
- Create a directory for the project: 为项目创建一个文件夹
mkdir composetest
cd composetest
Create a file called app.py in your project directory
- 文件内容如下:
Create another file called requirements.txt in your project directory
: 创建一个requirements.txt
文件
Create a Dockerfile
: 创建一个 Dockerfile
FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
Define services in a Compose file
: 在 compose 文件 中定义服务
Build and run your app with Compose
:From your project directory, start up your application by running docker-compose up.
测试
浏览器测试效果
停止 compose
:docker-compose stop
|docker-compose down
|Ctrl + C
停止多个容器
Docker Swarm
- 集群管理
搭建集群
docker swarm --help