Docker概述
Docker是一个开源的应用性容器引擎 , 让开发者可以打包他们的应用以及依赖包到可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口(相互之间是隔离的,独立的,相互不影响的).
Docker 是一个应用打包、分发、部署的容器
诞生于2013年,基于Go语言实现
Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器(docker容器)中,然后发布到任何流行的Linux机器上
容器是完全使用沙箱机制,相互隔离
容器性能开销低
你可以把它理解为一个轻量的虚拟机,它只虚拟你的软件需要的运行环境,多余的一点也不要,而普通虚拟机则是一个完整的庞大的系统,包含各种你需不需要的软件。
为什么要安装Docker?
Linux软件安装
通过yum命令安装软件,是直接把软件安装到Linux系统中。 因为软件和系统是强关联的,各种各样的文件和配置和Linux相互粘连到一块的,所以安装和删除都比较麻烦。
图示
但是使用Docker之后就不会出现这些问题
Docker是一种容器技术,解决了软件和系统的强关联关系,使得软件的安装和卸载非常方便。
可以从图中看出Docker容器将软件和Linux隔离开,将软件直接安装在了Docker中,软件直接相互隔离互不影响,使得软件的安装和删除非常方便。
Docker架构
Docker安装
Docker 可以运行在 MAC , Windows , CentOS , UBUNTU 等操作系统上,本课程基于 CentOS8 安装
Docker 。
官网: https://www.docker.com
安装 yum-utils, 配置镜像源需要使用
yum install -y yum-utils
设置更新 docker 镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
测试 docker 版本
docker -v
启动常用命令
docker 安装成功后并没有启动 ,
启动命令
systemctl start docker
关闭命令
systemctl stop docker
设置开机自动启动
systemctl enable docker
Docker****卸载
停止服务
systemctl stop docker
卸载
yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
删除文件
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
Docker****配置
配置镜像加速
在 etc 下创建 docker 目录
mkdir -p /etc/docker
进入 docker 目录
cd /etc/docker
创建 daemon.json 文件
touch daemon.json
修改文件
vim daemon.json
{
"registry-mirrors": ["https://dockerhub.icu"]
}
重载配置 (重新加载配置)
systemctl daemon-reload
重启
systemctl restart docker
Docker****服务命令
Docker****服务命令
镜像和容器
镜像( Image ): Docker 将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜
像。
容器( Container ):镜像中的应用程序运行后形成的进程就是容器,只是 Docker 会给容器做隔离,对
外不可见。
安装镜像前给大家介绍一下什么是镜像,镜像相当于一个软件安装包,只不过比普通的软件安装包高级一点,这个软件安装包包装了应用程序,以及其所需要的依赖、环境等,这样一个软件安装包就叫做镜像
什么是容器,就字面意思就是一个容器装一个软件并管理软件,粗略的可以把容器理解为一个软件。
镜像列表
docker images
从 docker 仓库拉取镜像到本地仓库
docker pull
删除本地镜像
docker rmi 镜像名 / 镜像 id
载入本地镜像
docker load -i 镜像文件名
使用本地下载镜像的时候会遇到一个tar文件,这个相当于镜像(软件安装包)的压缩包
载入本地镜像的时候就相当于解压这个压缩包
Docker****容器命令
删除容器,需要容器停止运行,然后再把容器删除,然后删除镜像( 停止容器才能删除容器,删除容器才能删除镜像 ),如以下步骤
创建一个新的容器并运行
docker run 镜像名
查看容器
docker ps -a
启动容器
docker start 容器名
停止容器
docker stop 容器名
删除容器
docker rm 容器名
查看容器日志
docker logs 容器名
Docker安装mysql
下载镜像
docker pull mysql:8.0
安装(安装软件)
docker run -d -p 3306:3306 \
--name mysql \
--restart=always \
--privileged=true \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=root \
mysql:8.0
进入到容器
docker exec -it 容器名 / 容器 id bash
登录 mysql
mysql -uroot -proot
修改 root 账号加密方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
退出
exit
docker run 命令的常见参数 :
--name :指定容器名称
--restart=always 自动启动
--privileged=true 拥有特权
-p :指定端口映射
-d :让容器后台运行
数据卷挂载
数据卷 是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。
它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器产生的数据到宿主机目录。
在执行 docker run 命令时,使用 -v 数据卷:容器内目录可以完成数据卷挂载。
由于容器内的目录操作起来不方便,例如mysql数据目录,Tomcat项目部署目录。所以可以在Linux(宿主机)中创建一个目录,运行镜像时,把宿主机中的目录和容器内目录建立映射关系,后期运行产生的数据,就可以存储到宿主机中的映射目录中。
宿主机中的目录称为数据卷
数据卷案例
创建 mysql 数据卷
mkdir -p /opt/mysql/data
安装
docker run -d -p 3306:3306 \
--name mysql \
--restart=always \
--privileged=true \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=root \
-v /opt/mysql/data:/var/lib/mysql \
mysql:8.0
Docker安装nginx
Nginx 是一款是由俄罗斯的程序设计师所开发高性能的 Web 服务器 ( 只能运行前端项目 , 不能运行
java 项目 ) 。
其特点是占有内存少,并发能力强,事实上 nginx 的并发能力在同类型的网页服务器中表现较好,
中国大陆使用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等等。
Nginx 专为性能优化而开发,性能是服务器最重要的考量,实现上非常注重效率,能经受高负载的
考验,据报告能支持高达 50,000 个并发连接数。
拉取镜像
docker pull nginx:1.24
创建数据卷
mkdir -p /opt/nginx/html
安装命令
docker run -d -p 80:80 \
--name nginx \
--restart=always \
--privileged=true \
-v /opt/nginx/html:/usr/share/nginx/html \
nginx:1.24