参考视频:https://www.bilibili.com/video/BV1QA411L7B5?p=64&spm_id_from=pageDriver
概述
Docker是一个开源的应用容器引擎,基于go语言开发的,开源项目。 Docker技术让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,打包好的容器可以发布到任何流行的Linux服务器上运行。
- 官网:https://www.docker.com/
- 镜像仓库地址:https://hub.docker.com/
- 镜像:images,从Docker下载下来的叫做镜像
- 容器:使用
docker run
命令运行起来的镜像叫做容器
Docker环境搭建
1.Docker的安装(环境CentOS)
- 安装前查看系统是否已经安装了Docker
yum list installed | grep docker
- Dcoker的安装
yum install docker -y
- 查看Docker是否安装成功
docker --version或者docker -v
- Docker的卸载
yum remove xxx
centOS8安装Docker解决Docker和podman冲突的问题
# 删除podman依赖
yum erase podman buildah
# 更换阿里的源
curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
# 安装docker
yum install docker-ce docker-ce-cli containerd.io -y
Ubantu下安装Docker参考:https://docs.docker.com/engine/install/ubuntu/
或者:https://kalacloud.com/blog/how-to-install-and-use-docker-on-ubuntu/#第-1-步-安装-docker
2.Docker服务启动
- Docker服务的启动
systemctl start docker或者service docker start
- Docker服务的停止
systemctl stop docker或者service docker stop
- Dcoker服务的重启
systemctl restart docker或者service docker restart
- 检查docker进程的运行状态
systemctl status docker或者service docker status
- 查看docker进程
ps -ef | grep docker
3.Docker服务信息
- 查看docker系统信息
docker info
- 查看所有的帮助信息
docker
- 查看某个命令的帮助信息
docker command --help
4.Docker的运行机制
Docker的底层运行原理:Docker服务启动-》下载镜像=》启动镜像得到一个容器=》在容器里运行着我们想要的程序
5.第一个Docker容器
- 将Docker服务启动
service docker start
- 下载一个镜像:Docker运行一个容器前需要本地存有对应的镜像,如果镜像不存在本地,Docker会从镜像仓库下载(默认是https://hub.docker.com/)
1. 搜索镜像
1. 可以从docker hub官网搜索要使用的镜像
2. 或者使用命令行docker search 名称
2. 下载镜像
# docker pull tomcat:latest,其中:latest可以省略
docker pull tomcat # 默认表示下载最新版本
- 启动一个镜像,运行后将得到一个容器
1.前台运行
docker run 镜像ID或者镜像名
2. 后台运行
docker run -d 镜像ID或者镜像名
示例:
docker run tomcat
可以使用ps -ef | grep tomcat查看是否启动成功
6.本地已有镜像的查看
docker images
7.进入Docker容器
- 进入容器
# 查看运行着的容器,容器ID或者容器名信息
docker ps
# i表示交互式的,就是保持标准输入流打开
# t表示虚拟控制台,分配到一个虚拟控制台
docker exec -it 容器ID或者容器名 bash
- 退出容器
exit
8.客户机访问容器
从客户机上访问容器,需要有端口映射,docker容器默认采用桥接模式和宿主机通信,需要将宿主机的IP端口映射到容器的IP端口上。
# 停止容器
docker stop 容器名/容器ID
# 启动容器
docker run -d -p 8080:8080 tomcat
Docker核心组件
1.Docker架构
Docker使用客户端-服务器架构模式,使用远程API来管理和创建Docker容器。Docker容器通过Docker镜像来创建。镜像和容器的关系类似于面向对象编程中的类和对象的关系。
2.Docker核心要素
Docker的三个核心要素:镜像、容器、仓库。
3.镜像的常用操作
- 下载镜像
# 获取镜像有两种方式,一种是从官方镜像仓库下载,
# 另一种通过Dockerfile文件构建
# 示例:下载redis镜像
# redis是查询到的镜像名称,latest是镜像的标签即tag
# 不指定标签则默认latest,表示最新版本
docker pull redis:latest
- 列出已经下载的镜像
docker images或者docker images 镜像名
- 运行镜像
# -d表示后台运行
docker run -d tomcat
# 查看运行着的tomcat进程
ps -ef | grep tomcat
- 查看容器镜像的状态
docker ps
- 删除镜像
docker rmi 镜像名:tag
# 示例
docker rmi redis:latest
4.容器的常用操作
- 启动容器
# 1.基于镜像新建一个容器并启动
docker run -d tomcat
# 2.将在终止状态的容器重新启动
docker start 容器ID或者容器名称
- 查看运行中的容器
docker ps
- 查看所有容器
docker ps -a
- 停止容器
docker stop 容器ID或者容器名称
- 删除容器:删除容器时,容器必须是停止状态,否则会报错
docker rm 容器名称或者容器ID
- 进入容器
docker exec -it 容器名称或者容器ID bash
- 查看容器的更多信息
docker inspect 容器ID或者容器名称
- 停用全部运行中的容器
docker stop ${docker ps -q}
- 删除全部容器
docker rm ${docker ps -aq}
一条命令实现停用并删除全部容器:
docker stop ${docker ps -q} & docker rm -f ${docker ps -aq}
5.仓库的常用操作
仓库分为公开仓库和私有仓库。最大的公开仓库是Docker Hub:hub.docker.com
.
- 查找官方仓库中的镜像
docker search 镜像名
- 将镜像从仓库下载到本地
docker pull 镜像名
Docker使用示例
1.Docker安装Mysql
- 下载MySQL镜像并运行
# -e表示指定环境变量
docker pull mysql:latest
docker run -p 3306:3306 -e MYSQL_DATABASE=数据库名称 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
- 进入容器
docker exec -it 容器名或者容器ID bash
- 登录Mysql
# 当前机器内登录MYSQL
mysql -h localhost -u 用户名 -p
# 远程登录MYSQL需要授权远程登录访问
# 1.创建远程登录用户
CREATE USER '远程登录用户名'@'%' IDENTIFIED WITH mysql_native_password BY '远程登陆密码';
# 2.授权指定远程登录用户的所有权限并设置远程访问
GRANT ALL PRIVILEGES ON *.* TO '远程登录用户名'@'%';
- 修改密码
alter user '用户名'@'主机名' IDENTIFIED BY '更改后的密码';
# 例如
alter user 'root'@'localhost' IDENTIFIED BY '666666';
2.Docker安装Nginx
- 下载Nginx镜像并运行
docker pull nginx
docker run -d -p 80:80 nginx
- 进入容器
docker exec -it 容器ID或者容器名 bash
- 浏览器访问Nginx
http://124.222.104.217:80
- Nginx部署静态网站
# 关键:将Linux本地项目拷贝到docker容器某个目录下
# 语法:docker cp 源路径 容器名/容器ID:目标路径
docker cp /root/test.html 0af30c50f685:/usr/share/nginx/html
3.Docker安装zookeeper
- 下载zookeeper镜像并运行
docker pull zookeeper
docker run -d -p 2181:2181 zookeeper
- 进入容器
docker exec -it 容器名/容器ID bash
- 客户端工具访问zookeeper
4.Docker安装ActiveMQ
- 下载ActiveMQ镜像并运行
docker pull webcenter/activemq
docker run -d -p 8161:8161 webcenter/activemq
- 进入容器
docker exec -it compassionate_noyce bash
- 浏览器访问ActiveMQ
http://124.222.104.217:8161/
5.Docker安装redis
- 下载redis镜像
# 不指定版本默认拉取最新版本
docker pull redis
- 启动redis容器
参数详解:
--restart=always表示总是开机启动
--name:给redis容器起名字
-p 6379:6379 将6379端口挂载出去
-d redis 表示后台启动
--appendonly yes:表示开启redis持久化
--requirepass xxx表示设置密码
docker run --restart=always -p 6379:6379 --name myredis -d redis --requirepass 123456
- 进入容器
# redis-cli是客户端工具
docker exec -it myredis redis-cli
Docker自定义镜像
1.Dockerfile的基本结构
Dockerfile文件用于构建Docker镜像,Dockerfile文件由一行行命令语句组成,基于这些命令来构建一个镜像。一般的,Dockerfile分为四个部分:基础镜像信息,维护者信息,镜像操作指令,容器启动时执行指令。
2.Dockerfile指令
- FROM
Dockerfile的第一条指令必须为FROM指令,如果在同一个Dockerfile文件中
创建多个镜像时,可以使用多个FROM指令
格式为:FROM <image> 或者FROM <image>:<tag>
- MAINTAINER:格式为
MAINTAINER <name>
,指定维护者信息 - ENV:格式为
ENV <key> <value>
,指定一个环境变量,会被后续RUN指令使用,并且在容器运行时保持。 - ADD:格式为
ADD <src> <dest>
复制指定的到容器中的 - EXPOSE:格式为
EXPOSE <port> [<port>...]
,告诉Docker服务端容器暴露的端口号。在启动容器时需要通过-p映射端口,Docker主机会自动分配一个端口转发到指定的端口。 - RUN:格式为
RUN <command>
,RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像。 - CMD
指定启动容器时执行的命令,每个Dockerfile只能有一条CMD命令。
如果指定了多条命令,只有最后一条会被执行。
如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令
3.自定义JDK镜像
- Dockerfile如下,位于/root目录下
FROM centos:centos7
MAINTAINER nrvcer
ADD jdk-17_linux-x64_bin.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk-17.0.2
# 视JDK版本而定
#ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
CMD java -version
- 构建镜像
# -t参数指定镜像名
# /root/表示使用root目录下的编写好的Dockerfile文件来构建镜像
docker build -t jdk-unserdefined /root/
- 运行镜像
docker run jdk-unserdefined:latest
4.自定义Tomcat镜像
- Dockerfile文件如下,位于/root目录下
FROM jdk-unserdefined:latest
MAINTAINER nrvcer
ADD apache-tomcat-10.0.12.tar.gz /usr/local
ENV CATALINA_HOME /usr/local/apache-tomcat-10.0.12
ENV PATH $PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin
expose 8080
CMD /usr/local/apache-tomcat-10.0.12/bin/catalina.sh run
- 构建镜像
docker build -t userdefined-tomcat /root
- 运行镜像
docker run -p 8080:8080 userdefined-tomcat
5.自定义redis镜像
note:关闭redis保护模式,以便远程连接redis成功。-protected-mode no
6.自定义MYSQL镜像
7.镜像发布到仓库
1.阿里云容器镜像仓库:参考 https://dev.aliyun.com
2.发布镜像到阿里云镜像仓库
创建命名空间和镜像仓库后参考如下示例发布镜像
- Docker Hub镜像加速