docker 快速入门
目录
第一章 docker 概述
1.1 传统应用部署
-
购买一台硬件服务器
-
在服务器上安装配置操作系统
-
在操作系统上配置运行环境
-
部署并运行应用
缺点:
-
部署应用非常慢
-
需要花费的成本非常高,(时间成本、服务器成本)
-
应用迁移麻烦,又得重新重复部署应用的操作
解决------出现虚拟化技术
1.2 虚拟化技术
是一种计算机资源管理技术,将计算机的各种资源,比如服务器,cpu,内存及存储等,予以抽象和转换后呈现出的一套新的硬件资源环境。
1.3虚拟化技术的分类
-
硬件虚拟化(hardware-level-virtualization)
-
操作系统级虚拟化 (os-level-virtuallization)
1.3.1 硬件虚拟化
-
核心技术:Hypervisor,
-
代表:VMWare 桌面版虚拟机使用该技术
1.4 虚拟化技术的优缺点
优点:一台物理服务器,可以虚拟化出来多个虚拟的服务器,充分利用计算机资源。
缺点:
-
每创建一个虚拟机的时候,都会创建一个操作系统,会大大浪费资源
-
环境兼容性问题,开发时,环境运行正常,部署到虚拟机环境测试时候可能会发生错误。
1.5 容器技术发展
基于硬件级别的虚拟化技术存在的缺陷和不足,发展出新的虚拟化技术:操作系统级虚拟化技术。
操作系统级虚拟化技术:是运行在操作系统之上的虚拟化技术,它模拟的是运行在一个操作系统上的多个不同进程,并将其封装在一个密闭的容器里面,该技术也称为容器化技术
容器化技术:Docker是目前最流行的一种实现。Docker基于LXC技术,Linux Container,内核虚拟化技术。可以提供轻量级的虚拟化,以便隔离资源和进程。和 宿主机使用同一套内核,性能损耗小,Docker技术的面世,将LXC技术发扬光大。
1.6 Docker是什么
-
Docker是一个开源的应用容器引擎,它基于Google公司推出的Go语言实现,项目代码托管在github
-
Docker技术让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,打包好的容器可以发布到任何流行的Linux服务器上运行。这样可以解决开发环境和运行环境不一致的问题。
-
Docker彻底释放了虚拟化的为例,减低计算机资源供应的成本,Docker重新定义程序开发测试、交付、和部署的过程、Docker提出了构建一次,到处运行的理念,让应用的开发、测试、部署和分发都变得前所未有的高效和轻松。
总结:Docker是对软件和其依赖环境的标准化打包,应用之间相互隔离,共享一个os kernel(解决资源浪费问题),可运行在许多主流的操作系统上。
注意:Docker本身不是容器,只是操作容器的引擎。
1.7容器和虚拟机的区别
容器:是代码和其依赖环境打包出来的一个集合。
虚拟机:从物理层面上,分出来的一个操作系统。
-
多个容器可以运行在同一台物理服务器上,并共享一个操作系统的内核资源。
-
多个虚拟机也可以运行在同一台机器上,但每个虚拟机都需要有一个自己的完整的操作系统。
容器是本地操作系统上实现虚拟化,直接复用本地主机的操作系统,不需要单独安装操作系统,而传统的虚拟化技术,需要单独安装每个虚拟机的操作系统。
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘空间 | 一般为几十MB | 一般10GB |
性能 | 接近原生 | 弱于原生 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
操作系统 | 与宿主机共享操作系统 | 宿主机os上运行虚拟机os |
1.8 为什么使用Docker
-
Docker容器的启动要比虚拟机快得多,可以在秒级实现
-
Docker对系统的资源利用率很高,一台主机上可以同时运行数千个docker容器
-
容器除了运行其中的应用以外,基本不消耗额外的系统资源,使得系统的应用的性能很高。
-
Docker可以快速的交付和部署,大量地节约开发成本,测试,部署的时间,对于开发和运维人员来说,一次创建和配置,就可以在任意地方正常运行。
-
Docker容器的运行不需要额外的hypervior支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
-
更轻松地迁移和扩展,Docker容器几乎可以在任意平台上运行,兼容性,可以让用户轻松地将一个应用从一个平台迁移到另外一个平台。
第二章 Docker 环境搭建
2.1 Docker的版本
-
DockerCE 免费社区版
-
DockerEE 付费企业版
Docker官网:Docker: Accelerated, Containerized Application Development
2.2 Docker的安装
Docker不是容器,只是一个管理容器的引擎。
使用Linnux的centos 7 ,学习Docker更推荐在Linux
2.2.1 遇到无法通过finalshell连接虚拟机问题
当前虚拟机centOs7,
用户:root
密码:root (linux下输入密码不可见*)
查看本机ip地址
ipconfig
本地地址出现127.0.0.1问题
输入:dhclient -v 进行修复
再继续ipconfig
可以正确获取ip
打开本地电脑的cmd,输入
ping 192.168.40.129
ping 通了了
登录finalshell 创建连接输入地址,用户名和密码就可以正常连接。
======================================================================
继续Docker的安装
(linux操作)
-
检查该虚拟机有无安装Docker
-
yum list installed | grep docker
-
-
安装Docker
-
yum install docker -y
-
安装成功使用
docker -verson 或者docker-v 查看docker是否安装成功
-
卸载
yum remove docker -y
-
2.3 Docker 服务的启动
安装之后启动Docker 服务
启动:systemctl start docker 或者 service docker start
停止:systemctl stop docker 或者 service docker stop
重启: systemctl restart docker或者 service docker restart
检查docker进程的运行状态:
systemctl status docker 或者 service docker status
查看docker进程:ps -ef | grep docker
2.4 Docker服务信息
docker info 查看docker系统信息
docker 查看所有的帮助信息
docker commond -help 查看某个命令的帮助信息
2.5 Docker使用初体验
2.5.1 Docker的运行机制
Docker的底层运行原理:
Docker服务启动->
下载镜像 ->
启动该镜像得到一个容器->
容器里运行着我们想要的程序;
2.5.2 第一个Docker容器
下载运行第一个Docker容器:
步骤:
-
将Docker服务启动;
service docker start
-
下载一个镜像,Docker运行一个容器前需要本地存在对应得镜像,如果镜像不存在本地,Docker会从镜像仓库下载(默认是DockerHub公共注册服务器中的仓库 Docker)
centOS下如果下载(pull)镜像?
从docker hub搜索镜像,也可以使用命令行使用命令搜索要使用的镜像,比如docker search tomcat 进行搜索,然后下载所需要的镜像:
-
下载镜像: docker pull tomcat
-
运行镜像: docker run tomcat (前台运行,要后台运行加参数 -d)
-
运行指定版本镜像: docker run tomcat:9.0.58
docker run -d tomcat:9.0.58
-
显示本地已有镜像: docker images
-
查看镜像运行状态:docker ps
-
ps -ef | grep tomcat 检查tomcat镜像是否启动成功
2.5.3 进入Docker容器 - 端口映射
-
关闭tomcat镜像
-
查看CONTAINER ID ----- docker ps
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e2d171d47ebd tomcat:9.0.58 "catalina.sh run" 39 minutes ago Up 39 minutes 8080/tcp sad_mccarthy
-
关闭镜像 ---docker stop e2d171d47ebd
-
-
端口映射 -做端口映射,就可以docker容器和宿主机进行通讯,本机浏览器可以访问tomcat
docker run -d -p 8080:8080 tomcat:9.0.58
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 816d3d77fc0d tomcat:9.0.58 "catalina.sh run" 7 seconds ago Up 5 seconds 0.0.0.0:8080->8080/tcp focused_leakey
端口映射:
linux端口得8080对应容器里面得8080
2.5.4 解决docker内tomcat容器启动成功后,无法访问tomcat页面(404)问题
如题,首先 tomcat镜像存在,并且外部映射启动成功,
通过 docker ps也可以查看到正在运行
[root@localhost bin]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/tomcat latest ab37a470285a 10 days ago 474 MB docker.io/tomcat 9.0.58 1fd0bf15d6bd 9 months ago 680 MB [root@localhost bin]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 56f4b8a5f8d6 tomcat:9.0.58 "catalina.sh run" 58 seconds ago Up 57 seconds 0.0.0.0:8080->8080/tcp sharp_visvesvaraya
通过 docker exec -it 容器id(即已启动的tomcat容器id) /bin/bash 命令进入容器内部,
然后输入ls 查看
[root@localhost bin]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 67989c421ec5 tomcat:9.0.58 "catalina.sh run" 2 minutes ago Up 2 minutes 0.0.0.0:8080->8080/tcp infallible_raman [root@localhost bin]# docker exec -it 67989c421ec5 /bin/bash root@67989c421ec5:/usr/local/tomcat# ls BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work
查了次发现webapps文件夹下为空,怪不得tomcat 404找不到
root@67989c421ec5:/usr/local/tomcat# ls BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work root@67989c421ec5:/usr/local/tomcat# ls webapps root@67989c421ec5:/usr/local/tomcat# ls webapps
下面把webapps这个空文件夹删除,把webapps.dist当做新的webapps文件
命令是 rm -rf webapps 强制删除
然后输入 mv webapps.dist webapps 把webapps.dist文件 当做新的webapps文件,
然后依次输入ls 和ls webapps查看新的webapps文件下是否有东西
root@67989c421ec5:/usr/local/tomcat# rm -rf webapps root@67989c421ec5:/usr/local/tomcat# mv webapps.dist webapps root@67989c421ec5:/usr/local/tomcat# ls webapps ROOT docs examples host-manager manager root@67989c421ec5:/usr/local/tomcat# exit exit
这时 输入exit命令退出该目录,输入 docker ps 查看一下正在运行的容器
[root@localhost bin]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 67989c421ec5 tomcat:9.0.58 "catalina.sh run" 5 minutes ago Up 5 minutes 0.0.0.0:8080->8080/tcp infallible_raman
外部浏览器访问tomcat 成功
2.5.5 进入Docker 容器
进入容器
docker exec -it 67989c421ec5(容器id)bash
i表示交互式得,保持标准输入流打开
t表示虚拟控制台
退出容器
exit
进入容器
[root@localhost bin]# docker exec -it 67989c421ec5 bash root@67989c421ec5:/usr/local/tomcat# ls
ls -l c查看
root@67989c421ec5:/usr/local/tomcat# ls -l total 128 -rw-r--r--. 1 root root 18970 Jan 15 2022 BUILDING.txt -rw-r--r--. 1 root root 6210 Jan 15 2022 CONTRIBUTING.md -rw-r--r--. 1 root root 57092 Jan 15 2022 LICENSE -rw-r--r--. 1 root root 2333 Jan 15 2022 NOTICE -rw-r--r--. 1 root root 3378 Jan 15 2022 README.md -rw-r--r--. 1 root root 6898 Jan 15 2022 RELEASE-NOTES -rw-r--r--. 1 root root 16507 Jan 15 2022 RUNNING.txt drwxr-xr-x. 2 root root 4096 Feb 12 2022 bin drwxr-xr-x. 1 root root 22 Nov 18 02:59 conf drwxr-xr-x. 2 root root 4096 Feb 12 2022 lib drwxrwxrwx. 1 root root 177 Nov 18 02:59 logs drwxr-xr-x. 2 root root 159 Feb 12 2022 native-jni-lib drwxrwxrwx. 2 root root 30 Feb 12 2022 temp drwxr-xr-x. 7 root root 81 Jan 15 2022 webapps drwxrwxrwx. 1 root root 22 Nov 18 03:05 work
应用一般放在webapps中
root@67989c421ec5:/usr/local/tomcat/webapps# ls -l total 4 drwxr-xr-x. 3 root root 223 Feb 12 2022 ROOT drwxr-xr-x. 15 root root 4096 Feb 12 2022 docs drwxr-xr-x. 7 root root 99 Feb 12 2022 examples drwxr-xr-x. 6 root root 79 Feb 12 2022 host-manager drwxr-xr-x. 6 root root 114 Feb 12 2022 manage
第三章 Docker 核心组件
3.1 Docker架构
Docker采用客户端-服务器(CS)架构模式,使用远程api来构建和管理Docker容器。
Docker容器通过Docker镜像来创建。
镜像和容器的关系就像是类与对象
Docker | 面向对象 |
---|---|
镜像 | 类 |
容器 | 对象 |
3.2 Docker的核心要素
镜像(Images)、容器(Container)、仓库(Repository)
Docker不是容器是管理容器的引擎。
3.3 镜像
3.3.1 镜像的基本概念
Docker镜像就是一个只读的模板,可以用来创建Docker容器。
例如:一个镜像可以包含一个完整的centos操作系统,里面安装tomcat及其需要的其它应用程序。
如:tomcat镜像,里面就会包含java的运行环境。
root@67989c421ec5:/# java -version openjdk version "11.0.14.1" 2022-02-08
3.3.2 镜像的组成结构
-
bootfs 引导文件系统
-
rootfs root文件系统(通常就是某种操作系统,centos、ubuntu)
-
其它文件系统环境
-
3.3.3 镜像的日常操作
-
下载镜像:下载redis ,直接去官网找: Docker 默认下载最新版,可以指定版本:1.01.1,冒号后面接版本号
docker pull redis:latest
-
列出已下载镜像
docker images 或者 docker images redis
-
运行镜像
docker run -d redis -d表示后台运行
ps -ef | grep redis 查看redis进程
-
查看容器镜像的状态
docker ps
docker exec -it (镜像id) bash 进入redis容器
-
删除镜像
docker rmi redis:latest
注意是rmi ,不是rm
rm是删除容器。
3.4 容器
3.4.1 容器的基本概念
容器是镜像创建的运行实例,可以被启动、停止、删除;每个容器都是相互隔离的,保证安全的平台。可以把容器看作一个简易版的linux环境。
Docker利用容器来运行应用,镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
3.4.2 容器的日常操作
启动容器有俩种方式:
-
基于镜像新建一个容器并启动
-
将处于终止状态的容器重新启动
通过镜像启动容器:
docker run -d redis
加端口映射
docker run -d -p 6379:6379 redis
查看运行中的容器:
docker ps
查看所有的容器
docker ps -a
开启容器
docker start 容器id 或容器名称
停止容器
docker stop 容器id 或容器名称
开启容器
docker start 容器id 或容器名称
因为docker容器太轻量级了,很多时候,用户可以随时创建和删除容器
删除容器
docker rm 容器id 或容器名称
删除时需要保证容器状态时停止状态,否则会报错
进入容器
docker exec -it 容器id 或容器名称 bash
停止容器
docker stop 容器id 或容器名称
已经停止的容器可以使用命令docker start来启动
使用
docker inspect + 容器id 或容器名称
查看容器的信息
停止全部运行中的容器:
docker stop $(docker ps -q)
docker ps -q 仅仅把容器的id列出来
删除全部容器
docker rm $(docker ps -aq)
一条命令实现停用并删除容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
3.5 仓库
3.5.1 仓库的概念
仓库是集中存放镜像文件的地点,有时候会把仓库和仓库注册服务器(Registry)看作同一事物。
实际上仓库注册服务器上往往存放多个仓库,
仓库里面存放多个镜像
每个镜像存放不同标签(tag)
仓库分为公开仓库public和私有仓库private
最大的公开仓库是Docker Hub Container Image Library | App Containerization
用户也可以本地网络创建一个私有的仓库。
当用户创建自己的镜像之后就可以使用push命令,将其上传到公有或私有的仓库,这样下次在另外一台机器上使用这个镜像的时候只需要从仓库pull即可。
3.5.2 仓库的日常操作
用户使用 docker search 命令来查找官方仓库中的镜像:如
docker search rabbitmq
第四章 Docker 使用示例
4.1 Docker 安装MySQL
-
下载MySQL镜像(mysql )
docker pull mysql
docker run -p 3306:3306 -e MYSQL_DATABASE=workdb -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
-e 是指定环境变量
-
进入MySQL容器
docker exec -it 732d8fd42a3d bash
-
进入mysql
bash-4.4# mysql -uroot -p123456
-
修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'
此时若存在远程访问连接数据库失败的情况,检查数据库远程访问权限是否开启,MySQL8.0之后的版本默认开启。
4.2 Docker 安装Nginx
-
下载Nginx 镜像
docker pull nginx
docker run -p 80:80 -d nginx
-
进入容器
docker exec -it f86d2ef2ca21 bash
-
浏览器访问Nginx
http://192.168.40.129:80
-
Nginx部署静态网站
4.3 Docker 安装Zookeeper
-
下载Zookeeper镜像
docker pull zookeeper
docker run -p 2181:2181 -d zookeeper
-
进入容器
docker exec -it f86d2ef2ca21 bash
-
客户端访问
4.4 Dockers安装ActiveMQ(消息中间件)
在docker-hub 上没有官方版本
-
下载ActiveMQ镜像
docker pull webcenter/activemq
docker run -p 8161:8161 -d activemq
报错:
[root@localhost ~]# docker run -p 8161:8161 -d activemq:latest Unable to find image 'activemq:latest' locally Trying to pull repository docker.io/library/activemq ... /usr/bin/docker-current: repository docker.io/activemq not found: does not exist or no pull access. See '/usr/bin/docker-current run --help'.
docker run -p 8161:8161 -d webcenter/activemq
-
进入容器
docker exec -it f86d2ef2ca21 bash
-
浏览器访问ActiveMQ
第五章 Docker自定义镜像
5.1 Dockerfile文件
Dockerfile用于构建Docker镜像,是一行行命令语句构成的,基于这些语句就可以构建一个镜像。
Dockerfile样例:
5.2 Dockerfile的基本结构
一般分为四部分:
-
基础镜像信息:
-
维护者信息:
-
镜像操作指令:
-
容器启动时执行的指令:
5.3 Dockerfile 指令
-
FROM
格式为
FROM<image> 或 FROM <image>:<tag>
Dockerfile 文件第一条指令必须为FROM指令。如果在同一个Dockerfile中创建多个镜像的话,FROM指令需要一一对应,每个镜像一个
-
MANITAINER
格式:
MANITAINER<name>
指定维护者信息
-
ENV
格式:
ENV<key><value>
指定一个环境变量,被后续的run指令执行,并在容器运行时保持。
-
ADD
格式:
ADD<src><dest>
复制指定的<src>到容器中的<dest>
-
EXPOSE
格式:
EXPOSE<port>[<post>...]
告诉Docker服务器容器暴露的端口号,供互联系统使用,在启动容器时候需要通过-p 映射端口,Docker主机会自动分配一个端口转发到指定端口。
-
RUN
格式:
RUN<command>
run 指令是当前镜像基础上执行指令,并提交新的镜像,当命令行比较长的时候可以使用\换行
-
CMD
指定启动容器时执行的命令,每个Dockerfile 只能有一条CMD命令,多条会被最后一条所覆盖。
5.4 Dockerfile自定义镜像
5.4.1 自定义JDK镜像
FROM centos:latest MAINTAINER zhoushurui ADD jdk-8u281-linux-x64.tar.gz /usr/local ENV JAVA_HOME /usr/local/jdk1.8.0_281 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH $PATH:$JAVA_HOME/bin CMD java -version
-
在根目录下创建docker文件夹
-
放入jdk的tar压缩包
-
vim 编写Dockerfile
-
将上面Dockerfile内容写入
-
-
构建镜像
docker build -t zhoushurui_jdk1.8.0281 .
最后有个点.
代表当前目录下的Dockerfile文件,代表通过找寻Dockerfile来构建镜像
-
构建过程
[root@localhost docker]# docker build -t zhoushurui_jdk1.8.0281 . Sending build context to Docker daemon 143.7 MB Step 1/7 : FROM centos:latest Trying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos a1d0c7532777: Pull complete Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 Status: Downloaded newer image for docker.io/centos:latest ---> 5d0da3dc9764 Step 2/7 : MAINTAINER zhoushurui ---> [Warning] IPv4 forwarding is disabled. Networking will not work. ---> Running in b2517f341a68 ---> 3bd79502430a Removing intermediate container b2517f341a68 Step 3/7 : ADD jdk-8u281-linux-x64.tar.gz /usr/local ---> 9f0d3a39bf3e Removing intermediate container 1fbba7d4bb96 Step 4/7 : ENV JAVA_HOME /usr/local/jdk1.8.0_281 ---> [Warning] IPv4 forwarding is disabled. Networking will not work. ---> Running in 91e6df1b742f ---> 62245728c59d Removing intermediate container 91e6df1b742f Step 5/7 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ---> [Warning] IPv4 forwarding is disabled. Networking will not work. ---> Running in 159fccd9dcc1 ---> d44ae4ca4fa6 Removing intermediate container 159fccd9dcc1 Step 6/7 : ENV PATH $PATH:$JAVA_HOME/bin ---> [Warning] IPv4 forwarding is disabled. Networking will not work. ---> Running in c33697638c6e ---> 5af8613b7e00 Removing intermediate container c33697638c6e Step 7/7 : CMD java-version ---> [Warning] IPv4 forwarding is disabled. Networking will not work. ---> Running in 9fe88c6880df ---> 913bbe29d3d1 Removing intermediate container 9fe88c6880df Successfully built 913bbe29d3d1
创建成功的镜像编号913bbe29d3d1
通过docker images 查看本地镜像
-
运行容器
docker run -d 913bbe29d3d1
5.4.1.1出现问题WARNING: IPv4 forwarding is disabled. Networking will not work.
是没有开启转发,docker网桥配置完后,需要开启转发,不然容器启动后,就会没有网络,配置/etc/sysctl.conf,添加net.ipv4.ip_forward=1
解决:
vim /etc/sysctl.conf net.ipv4.ip_forward=1 #添加此行配置
重启network和docker服务
systemctl restart network && systemctl restart docker
查看是否修改成功
sysctl net.ipv4.ip_forward
-
运行成功
[root@localhost docker]# docker run bad754e2fa78 java version "1.8.0_281" Java(TM) SE Runtime Environment (build 1.8.0_281-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)
5.4.2 自定义Tomcat镜像
-
新定义Dockerfile文件(老的dockerfile改名Dockerfile-JDK)
FROM zhoushurui_jdk1.8.0281 MAINTAINER zhoushurui ADD apache-tomcat-9.0.58.tar.gz /usr/local ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.58 ENV PATH $PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 CMD /usr/local/apache-tomcat-9.0.58/bin/catalina.sh run
-
构建镜像
docker build -t zhoushurui-tomcat-9.0.58 .
最后有个. 不能少
-
运行镜像
docker run -d -p 8080:8080 e1619a85a006
5.4.2 自定义MySQL镜像
-
定义Dockerfile文件
FROM centos:centos6 MAINTAINER zhoushurui RUN yum install mysql-server mysql -y RUN /etc/init.d/mysqld start &&\mysql -e "grant all privileges on *.* to 'root'@'%' identified by '123456' WITH GRANT OPTION;"&&\mysql -uroot -p123456 -e "show databases;" EXPOSE 3306 CMD /usr//bin/mysqld_safe
FROM centos RUN ["echo", "start"] # 编译redis工具 RUN yum install -y gcc gcc-c++ net-tools make # 切换工作目录(容器目录) WORKDIR /usr/local/redis # 复制并解压redis源码包 ADD redis-6.0.16.tar.gz . WORKDIR /usr/local/redis/redis-6.0.16/src RUN make && make install WORKDIR /usr/local/redis/redis-6.0.16 # 复制本地配置到redis中 ADD redis.conf ./demo.conf WORKDIR /usr/local/redis/redis-6.0.16/src CMD ["./redis-server", "../demo.conf"]
-
构建镜像
docker build -t zhoushurui-mysql .
-
运行镜像
docker run -d -p 3306:3306
5.4.3 自定义redis镜像
-
Dockerfile
FROM centos:latest MAINTAINER zhoushurui ADD redis-6.0.16.tar.gz /usr/local EXPOSE 6379 CMD /usr/bin/redis-server
-
构建镜像
docker build -t zhoushurui-reids .
-
运行镜像
docker run -d -p 6379:6379 dasd531dad1a3
5.5 镜像发布到仓库
5.5.1 阿里云容器仓库
5.5.2 注册阿里云镜像仓库
支付宝登录
5.5.3 发布镜像阿里云镜像仓库
进入管理中心-镜像仓库菜单-没有仓库需要创建镜像仓库-对自己的镜像仓库点击管理链接。
推送:
imageId:e1619a85a006
-
上传
docker tag e1619a85a006 registry.cn-hangzhou.aliyuncs.com/zhoushurui/zsrtest:latest docker push registry.cn-hangzhou.aliyuncs.com/zhoushurui/zsrtest:latest
-
上传成功
REPOSITORY TAG IMAGE ID CREATED SIZE registry.cn-hangzhou.aliyuncs.com/zhoushurui/zsrtest latest e1619a85a006 3 hours ago 604 MB zhoushurui-tomcat-9.0.58 latest e1619a85a006 3 hours ago 604 MB zhoushurui_jdk1.8.0281 latest bad754e2fa78 4 hours ago 588 MB docker.io/mysql latest 3842e9cdffd2 4 days ago 538 MB docker.io/redis latest 3358aea34e8c 5 days ago 117 MB
5.5.4 镜像加速
Docker-Hub 镜像加速
/etc/docker/daemon.json
加上
"registry-mirrors": ["https://m42v7hv8.mirror.aliyuncs.com"]
第六章 Docker应用部署
6.1 部署一个SpringBoot 项目
-
将开发好的springboot程序打包成jar包或者war包 (jar包代表java程序,war包代表web程序)
-
maven 打包jar包和war包
-
-
将打好的jar包或者war包上传到Linux的某个目录下:/root/docker
-
定义Dockerfile文件,用于创建项目的镜像
6.2 Docker部署jar包SpringBoot程序
6.2.1 定义jar包程序Dockerfile文件
FROM zhoushurui_jdk1.8.0281 MAINTAINER zhoushurui ADD dongming-api.jar/opt RUN chmod +x/opt/dongming-api.jar CMD java-jar /opt/dongming-api.jar
-
构建镜像
docker build -t dongming-api-jar .
-
运行容器
docker run -d ab108f0849c0