一、Docker
1.1、什么是 Docker,Docker 与虚拟机的区别 ?
Docker 与 Vmware 的区别:
1、Docker 是一个开源的应用容器引擎;是一个轻量级容器技术;
2、Docker 支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;
3、运行中的这个镜像称为容器,容器启动是非常快速的。
4、 Docker 与 vmvare 虚拟机都使用了虚拟技术。
不同之处如下:
为什么 Docker 比 虚拟机快?
1、Docker 利用的是宿主机内核:Docker 上运行的应用在系统内存不够时,可以直接使用宿主系统的硬件资源。秒级。
Liunx 虚拟机上的应用程序运行内存只能使用虚拟机操作系统的。不能使用宿主的。
2、docker 架构上有更少的虚拟层。运行的容器实例都可直接使用宿主机的硬件资源。
Docker 运行时使用的都是宿主机的资源,Vmware 只能使用虚拟机操作系统创建时配置的资源。
1.2、为什么使用 Docker ?
1、更高效的利用系统资源
由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
2、更快速的启动时间
传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
3、一致的运行环境
开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。
4、持续交付和部署
对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。
而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
5、更轻松的迁移
由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
6、更轻松的维护和扩展
Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
7、对比传统虚拟机总结
特性 | 容器 | 虚拟机 |
---|---|---|
启动: | 秒级 | 分钟级 |
硬盘使用: | 一般为 MB | 一般为 GB |
性能 : | 接近原生 | 弱于 |
系统支持量: | 单机支持上千个容器 | 一般几十个 |
1.3、Docker 引擎
Docker 引擎是一个包含以下主要组件的客户端服务器应用程序。
- 一种服务器,它是一种称为守护进程并且长时间运行的程序。
- REST API用于指定程序可以用来与守护进程通信的接口,并指示它做什么。
- 一个有命令行界面 (CLI) 工具的客户端。
Docker 引擎组件的流程如下图所示:
shell 命令调用 server docker 守护进程。
1.4、Docker 系统架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
Docker | 面向对象 |
---|---|
容器 | 对象 |
镜像 | 类 |
标题 | 说明 |
---|---|
镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板。 |
容器(Container) | 容器是独立运行的一个或一组应用。 |
客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api ) 与 Docker 的守护进程通信。 |
主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
仓库(Registry) | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com ) 提供了庞大的镜像集合供使用。 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
1.5、Docker 镜像
镜像:可理解成面向对象中的 java 类。是一个个对象实例的 模板。
容器:容器是独立运行的一个或一组应用。可理解成实例对象。实例对象的属性是一个个应用程序。
1.6、Docker 容器
镜像:可理解成面向对象中的 java 类。是一个个对象实例的 模板。
容器:容器是独立运行的一个或一组应用。可理解成实例对象。实例对象的属性是一个个应用程序。
1.7、Docker 仓库
仓库:Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
分类:私有仓库、公有仓库。
1.8、安装 Docker 及帮助命令
1、检查内核版本,必须是3.10及以上
uname -r
2、安装docker
yum install docker
3、输入y确认安装
4、启动docker
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker -v
Docker version 1.12.6, build 3e8e77d/1.12.6
5、开机启动docker
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
6、停止docker
systemctl stop docker
7、帮助命令
docker version #docker的版本信息
docker info #docker 内的详细信息(运行容器的个数等)
docker --help #docker 命令帮助
centos8 docker 安装
参考:
https://www.linuxidc.com/Linux/2020-04/162958.htm
https://www.cnblogs.com/suanmiaoup/p/12772140.html
1.9、Docker 镜像加速器
一、问题:docker pull 下载卡在某一步原因
需要配置 docker 镜像加速器
1、注册阿里云账号,获取镜像加速地址
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
2、在 /etc/docker/deamon.json 中配置该地址,重启docker:systemctl restart docker
/etc/docker/daemon.json 中添加
{
"registry-mirrors": ["https://4gnor4sh.mirror.aliyuncs.com"]
}
二、Docker 镜像(镜像操作命令)
2-1、从仓库获取镜像
1、搜索镜像
docker search 镜像名称
2、拉去镜像
docker pull 镜像名称:版本号 //不写版本号默认 latest 最新的
2-2、管理本地主机上的镜像
1、查看本机上的所有镜像
docker images ls
2、删除镜像
docker images rm 镜像名称/镜像id
进阶:比如,我们需要删除所有仓库名为 redis 的镜像:
$ docker image rm $(docker image ls -q redis)
2-3、介绍镜像实现的基本原理
操作 | 命令 | 说明 |
---|---|---|
检索 | docker search 关键字 eg:docker search redis | 我们经常去docker hub上检索镜像的详细信息,如镜像的TAG。 |
拉取 | docker pull 镜像名:tag | :tag是可选的,tag表示标签,多为软件的版本,默认是latest |
列表 | docker images | 查看所有本地镜像 |
删除 | docker rmi image-id | 删除指定的本地镜像 |
1、镜像是什么?
轻量级、可执行、独立的软件包,用来打包软件开发环境、运行环境的软件,镜像包含运行某个软件所需要的所有内容,包括代码、运行时、库、环境变量和配置文件。
2、docker 镜像的运行原理
一个镜像类似一个千层饼,一层套一层
例如 Tomcat 镜像:
3、镜像分层,可资源共享。别的镜像可重复使用其他镜像的分层资源。
2-4、使用 Dockefile 定制镜像
1、作用:解决无法重复的问题、镜像构建透明性的问题、体积的问题。
2、Dockefile:是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
3、以 Nginx 为例:
mkdir dockerfile
mkdir mynginx
touch Dockerfile
#编辑 Dockerfile
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
涉及两条指令:From、Run:
From:所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜像是必须指定的。而 FROM 就是指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。
Run:RUN <命令>,就像直接在命令行中输入的命令一样。刚才写的 Dockerfile 中的 RUN 指令就是这种格式。详情请点我
4、Dockerfile 镜像构建上下文:
详情参考
5、Dokerfile 指令:
三、Docker 容器(容器操作命令)
软件镜像(QQ安装程序)----运行镜像----产生一个容器(正在运行的软件,运行的QQ);
步骤:
1、搜索镜像
[root@localhost ~]# docker search tomcat
2、拉取镜像
[root@localhost ~]#
docker pull tomcat
docker pull mysql
3、根据镜像启动容器
docker run --name mytomcat -d tomcat:latest
docker run --name mytomcat -p 8080:8080 -d tomcat
docker run --name mysql -p 3306:3306 -d mysql
4、docker ps
查看运行中的容器
5、 停止运行中的容器
docker stop 容器的id
6、查看所有的容器
docker ps -a
7、启动容器
docker start 容器id
8、删除一个容器
docker rm 容器id
9、启动一个做了端口映射的tomcat
[root@localhost ~]# docker run -d -p 8888:8080 tomcat
-d:后台运行
-p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口
10、为了演示简单关闭了linux的防火墙
service firewalld status ;查看防火墙状态
service firewalld stop:关闭防火墙
11、查看容器的日志
docker logs container-name/container-id
更多命令参看
https://docs.docker.com/engine/reference/commandline/docker/
可以参考每一个镜像的文档
12、重命名容器名称
docker rename tensquare_base tensquare_mysql
四、数据卷与数据卷容器
数据卷:类似共享文件夹,创建个文件夹与文件夹的映射关系,来共享数据。
作用:容器数据的持久化+容器间的数据共享。
如何创建数据卷?
1、命令行使用 -v 来挂载并创建容器与主机之间目录的对应关系。
1-1、命令行创建:
docker run -it centos -v /mydatavolumn:/datavolumn #主机目录:容器目录。
1-2、查看容器数据卷是否挂在成功:
docker inspect 容器id #命令以 json 串的形式显示容器的信息。可查看数据卷是否挂在成功。也可使用该命令修改已停止容器得配置文件。参考教程:
1-3、验证容器停止退出后,修改主机文件内容后是否与容器内数据同步:
是,类似 redis 的数据持久化 aof ,容器重启后会拉取主机目录全部数据,进行一次同步。
1-4、命令权限:
docker run -it -v /宿主机目录/容器内目录:ro 镜像名 #带权限创建数据卷,ro 只读,容器内数据只读,不可写。主机内的数据可单项同步到容器,在容器内不可写操作。2、使用 dockerfile 来创建数据卷。
2-1、根目录下新建 mydocker 文件夹并进入,创建 Dockerfile 文件。
2-2、使用 Volume 指令给镜像添加一个或多个数据卷。
From centos #From 类似 extends 继承的意思。
VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
CMD echo "Create finished......"
CMD /bin/bash #等同于 docker exec -it /bin/bash
2-3、使用 dockerfile 文件构建镜像
docker build -f dockerfile文件目录 -t 镜像名称
2-4、当启动容器后,容器内会自动创建对应的数据卷目录,主机对应的默认文件名称以uuid_data 形式命名呈现,可使用 docker inspect 容器id 来查看容器信息。3、Docker 挂载主机目录 Docker 访问出现 cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个 --privileged=true 参数即可。
数据卷容器:命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。
作用:容器间传递数据、共享。
1、运行容器 dc01 (该容器已经挂载了 /dataVolumeContainer1 /dataVolumeContainer2 两个数据卷)
docker run -it --name dc01 centos2、运行容器 dc02 数据卷继承于 dc01(该容器运行时也会有 dc01 挂载的两个数据卷目录)
docker run -it --name dc02 --volumes-from dc01 centos3、运行容器 dc03 数据卷继承于 dc01(该容器运行时也会有 dc01 挂载的两个数据卷目录)
docker run -it --name dc03 --volumes-from dc01 centos4、分别在 dc01、dc02、dc03 的数据卷中创建 01.txt、02.txt、03.txt。此时父容器<-->子容器内的对应数据卷中都会包含 01.txt、02.txt、03.txt 三个文件。达成容器之间的数据共享。
5、当删除容器 dc01 后,修改 dc02 数据卷内的数据仍然会影响到 dc03。
结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。
五、Dockerfile 解析
5-1、什么是 Dockerfile ?
- Dockerfile 介绍
JavaEE Hello.java-->Hello.class
Docker Images-->Dockerfile
对镜像源码级的描述。Dockerfile 是用来构建 Docker 镜像的构建文件,是由一系列命令和参数构成的脚本。
以 centos 镜像为例:https://hub.docker.com/_/centos/
- 编写规则:
- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数。
- 指令按照从上到下,顺序执行。
- #表示注释。
- 每条指令都会创建一个新的镜像层,并对镜像进行提交。
5-2、Dockerfile 构建过程解析
docker build -f Dockerfile -t tagname .
(1)docker 从基础镜像运行一个容器。
(2)执行一条指令并对容器作出修改。
(3)执行类似 docker commit 的操作提交一个新的镜像层。
(4)docker 再基于刚提交的镜像运行一个新容器。
(5)执行 dockerfile中 的下一条指令直到所有指令都执行完成。
注意必须有个 点号。
5-3、Dockerfile 中的保留字指令
保留字指令 | 含义 |
---|---|
FROM | 基础镜像,当前新镜像是基于哪个镜像的 |
MAINTAINER | 镜像维护者的姓名和邮箱地址 |
RUN | 容器构建时需要运行的命令 |
EXPOSE | 当前容器对外暴露出的端口 |
WORKDIR | 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点 |
ENV | 用来在构建镜像过程中设置环境变量 |
ADD | 将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL 和解压 tar 压缩包 |
COPY | 类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置 COPY src dest COPY ["src", "dest"] |
VOLUME | 容器数据卷,用于数据保存和持久化工作 |
CMD | 指定一个容器启动时要运行的命令 Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换 |
ENTRYPOINT | 指定一个容器启动时要运行的命令 ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数 |
ONBUILD | 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发 |
- 指令分类:
- Build( FROM MAINTAINER COPY ADD RUN ONBUILD .dockerignore)
- Both ( WORDDIR USER )
- RUN (CMD ENV EXPOSE VOLUME ENTRYPOINT )
- 总结:从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段
- Dockerfile 是软件的原材料
- Docker 镜像是软件的交付品
- Docker 容器则可以认为是软件的运行态。
Dockerfile 面向开发,Docker 镜像成为交付标准,Docker 容器则涉及部署与运维,三者缺一不可,合力充当 Docker 体系的基石。
5-4、Dockerfile 案例,见实战部分
- 1、自定义镜像 Tomcat9。
- 2、自定义镜像 Redis。
- 3、自定义镜像 Mysql。
- 4、自定义镜像 Oracel。
六、Docker 仓库
4-1、访问 Docker 仓库
4-2、访问 GitHub
4-1、访问 Docker 私有仓库
七、Docker 实战
docker 安装单机 Redis
- docker 启动 redis 容器
docker run -p 6380:6379 -v /home/PData/redis/data:/data -v /home/PData/redis/conf/redis.conf
docker 安装 Tomcat
- 1、查找 Docker Hub 上的 Tomcat 镜像
docker search tomcat
- 2、拉取镜像
docker pull tomcat
- 3、创建并运行容器
docker run -it --name tomcat -p 8888:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat
- 命令说明:
-it i 交互,t 终端,交互终端如 tomcat 启动后,命令行一直处于等待输入状态。相对于 -d 后台运行,守护进程运行。
-p 8080:8080:将容器的 8080 端口映射到主机的 8888 端口。大P 代表随机分配端口。
-v $PWD/test:/usr/local/tomcat/webapps/test:将主机中当前目录下的test挂载到容器的/test4、查看容器运行情况
docker ps5、通过浏览器进行访问 192.168.31.7:8888 tomcat 主页。
6、docker commit -a " " tagname 提交容器副本形成新的镜像。可搞集群部署。
docker 安装 MySQL
- 1、拉取 MySQL 镜像
docker pull tomcat
- 2、创建 MySQL 容器并运行:
docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql
或者
docker run -p 3307:3306 --name tensquare_mysql -v /home/PData/mysql/conf:/etc/mysql/conf.d -v /home/PData/mysql/logs:/logs -v /home/PData/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d be0dbf01a0f3 ```
- 命令说明:
run:创建容器并运行情况
-p 8080:8080:将容器的8080端口映射到主机的8080端口
-v $PWD/test:/usr/local/tomcat/webapps/test:将主机中当前目录下的test挂载到容器的/test
-p:映射指定端口
--name:运行容器名称
-v:目录挂载,将当前主机目录挂载到docker 容器的目录
- 3、进入 MySQL 容器,连接 MySQL。:
docker exec -it mymysql bash
mysql -uroot -proot
- 4、查看用户信息:
select host,user,plugin,authentication_string from mysql.user;
备注:
host为 % 表示不限制ip
localhost 表示本机使用
plugin 非 mysql_native_password 则需要修改密码
- 5、修改用户 Hosts ip 访问限制以及密码
ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
exit 可退出 docker 容器。
docker 安装 gitlab(git 自托管仓库)
docker 安装 Nexus(使用 Maven 私服仓库管理)
# 创建容器并运行
docker run -id --privileged=true --name=nexus3 --restart=always -p 8081:8081 -v /home/nexus3/nexus-data:/var/nexus-data 8eb898be2a53
注:需分配 2G 内存,等待 Nexus 初始化完成才可访问成功。
docker 构建 yapi 接口文档管理平台。
docker 构建 yapi(云服务器:47.95.38.201)
参考教程:
初始化管理员账号成功,账号名:"admin@admin.com",密码:"ymfe.org"
访问 :http://47.95.38.201:3000/
管理员:admin@admin.com
密码:admin@admin.com
docker 部署 oracle 数据库 。
docker 部署 fastDFS 文件系统 。
1、下载镜像
docker pull season/fastdfs
2、启动 tracker 服务器
docker run -ti -d --name trakcer -v ~/tracker_data:/fastdfs/tracker/data --net=host season/fastdfs tracker
注:启动这个容器之前请确认 22122 这个端口没有被占用 ,命令:netstat -aon | gerp 22122;关闭防护墙
~/ 代表 home 用户路径 /home/xxx/
3、启动 Storage 服务器
docker run -tid --name storage -v ~/storage_data:/fastdfs/storage/data -v ~/store_path:/fastdfs/store_path --net=host -e TRACKER_SERVER:192.168.163.130:22122 season/fastdfs storage
注:默认配置的 ip 地址不会生效需要自己重新配。
配置命令:
(1)docker cp storage:/fdfs_conf/storage.conf ~/ 把 storage.conf 拷贝到当前目录
(2)vi storage.conf 进入vi界面找到 tracker_server=192.168.163.130:22122 编辑 ip 地址 完成之后:wq保存退出
(3)docker cp ~/storage.conf storage:/fdfs_conf/ 把修改好的文件拷贝回之前的目录下 在重启一下 storage 就OK了
(重启命令:docker stop storage 关闭; docker start storage 开启)
4、docker exec -it trakcer(或者 storage ) bash (进入容器)
>cd fdfs_conf/fdfs_monitor storage.conf(进入配置中心)
docker exec -it storage bash
cd fdfs_conf
fdfs_monitor storage.conf #进入配置中心
注:查看配置是否生效记得把 trakcer 换成 storage 去查
打印出 tracker server is 47.95.38.201:22122 表示成功了
5、开启一个客户端 用来文件的上传与下载
docker run -ti --name fdfs_sh --net=host season/fastdfs sh (开启一个客户端 用来文件的上传与下载)
>docker cp ~/storage.conf fdfs_sh:/fdfs_conf/ (修改配置文件ip地址)
> cd fdfs_conf > fdfs_upload_file storage.conf /a.txt (上传文件) 如上传成功则会返回一个位置(group1/M00/00/00/wKijglwGjv6AIY45AAAABncc3SA663.txt)
6.查看文件上传的位置 进入~目录 >cd store_path > cd data>之后跟着返回的位置找就可以了
Dockerfile 构建 Tomcat
1、编写 Dockerfile 文件内容
FROM centos
MAINTAINER zzyy<zzyybse126.com>
#把宿主机当前上下文的 c.txt 携贝到容器/usr/local/路径下
COPY c.txt /usr/local/incontainer.txt
#把 jdk 与 tomcat 添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local
ADD apache-tomcat-9.0.8.tar.gz /usr/local
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的 WORKDIR 路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置 jdk 与 tomcat 环境变量
ENV JAVA_HOME /usr/local/jdk 8.0 171
ENV CLASSPATH JAVA_HOME/lib/dt.jar: $JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH: JAVA_HOME/bin: &CATALINA_HOME/lib: $CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行 tomcat
#ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup. sh
#CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina. sh","run"
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh & tail-f/usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out
2、docker build -f Dockerfile -t tagname 构建 dockerfile 生成 docker 镜像。
具体操作参考:https://blog.csdn.net/haiyangyiba/article/details/88805614
Dockerfile 构建 Redis
参考:https://blog.csdn.net/u012706771/article/details/87867684
Dockerfile 构建 Mysql
1、新建 /home/PData/Dockerfile MysqlDockerfile 文件
# docker build 时默认文件名为 Dockerfile,否则在-f 路径+filename 指定文件
#基础镜像,当前新镜像是基于哪个镜像的
FROM mysql:8.0
#设置 mysql 密码变量
ENV MYSQL_PWD root
#mysql 容器对外暴露的端口
EXPOSE 3307
#设置容器启动时执行的命令
CMD ["mysqld"]
2、执行 docker build 命令构建镜像。
docker build -f /home/PData/Dockerfile/MysqlDockerfile -t pgzmysql:v1.0 .
3、根据镜像 id 启动并运行容器。
#1、启动容器:根据 mysql 镜像创建并运行 tensquare_base 数据库容器实例
docker run -p 3307:3306 --name tensquare_mysql -v /home/PData/mysql/conf:/etc/mysql/conf.d -v /home/PData/mysql/logs:/logs -v /home/PData/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d be0dbf01a0f3
#2、进入容器
docker exec -it tensquare_mysql bash
#在一个已经 "exit” 的 docker 容器中修改配置文件,需要使用 docker inspect + 容器id 命令。docker exec 命令是在容器运行得前提下进行操作。
#3、链接 tensquare_base 数据库测试
mysql -h localhost -u root -p #密码为空,直接回车
select user,host from user;# 查看root 对应的是 % 还是 localhost,
#修改 root 用户密码
ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
#赋予远程连接权限
use mysql;
update user set host = '%' where user = 'root';
#4、重命名容器名称
docker rename tensquare_base tensquare_mysql
#5、设置 docker 容器开机启动
docker update --restart=always xxx
参考:https://www.cnblogs.com/royfans/p/11393791.html
#6、
Dockerfile 构建 Oracle
八、docker compose 使用(快速部署分布式应用)
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用
pip 方式安装,卸载命令:
sudo pip uninstall docker-compose