应用快速摆设
Nginx
- docker run -d -p 80:80 nginx
复制代码 使用欣赏器访问虚拟机地址
Redis
- docker pull redis
- docker run --name redis -d -p 6379:6379 redis
复制代码 可以使用 Redis 客户端工具毗连
毗连成功可以看到服务器信息
MySQL
企业中用得最多的是 MySQL 5.7 版本
- docker pull centos/mysql-57-centos7
- # MYSQL_ROOT_PASSWORD是设置默认登录用户名和密码都是root
- docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7
复制代码 通过客户端比方 navicat、dbeaver 毗连
Tomcat
可以先在 Docker Hub 中搜索 tomcat,找到对应的 tomcat 版本和 JDK 版本
- # 下载镜像
- docker pull tomcat
- # 创建tomcat目录
- mkdir -p /opt/docker/tomcat/ROOT
- cd /opt/docker/tomcat/ROOT
- # 创建index.html文件
- vim index.html
- # 写入简单内容
- <html>
- <h1>Hello Tomcat in Docker!</h1>
- </html>
- # 启动容器
- docker run -d -p 8080:8080 --name tomcat -v /opt/docker/tomcat:/usr/local/tomcat/webapps tomcat
复制代码 参数分析:
- -p 8080:8080 :将容器的 8080 端口映射到主机的 8080 端口
-p XXX:YYY :前面的 XXX 指的是宿主机的端口,反面的 YYY 指的是容器中的端口
- -v /opt/docker/tomcat:/usr/local/tomcat/webapps 将主机中 /opt/docker/tomcat 目次挂载到容器的 webapps
用欣赏器打开 8080 端口
制作镜像
镜像原理
思索:
- Docker 镜像本质是什么?
是一个分层文件系统
- Docker 中一个 centos 镜像为什么只有200MB,而一个 centos 操作系统的 iso 文件要几个G ?
Centos 的 iso 镜像文件包罗 bootfs 和 rootfs,而 docker 的 centos 镜像复用操作系统的 bootfs,只有 rootfs 和其他镜像层
- Docker 中一个 tomcat 镜像为什么有 600MB,而一个 tomcat 安装包只有 10多MB?
由于 docker 中镜像是分层的,tomcat 固然只有10多MB,但他必要依靠于父镜像和基础镜像,所有整个对外袒露的 tomcat 镜像大小 600多MB
镜像原理
基于已有容器创建
- docker commit [OPTIONS] 容器名称或ID [镜像名称[:TAG]]
- # 示例;使用MySQL容器创建镜像
- docker commit 7c mysqltest:1.0
- # 查看镜像
- docker images
- # 启动容器
- docker run -d -p 3306:3306 mysqltest:1.0
复制代码 OPTIONS 参数分析:
- -a, --author string :作者信息
- -c, --change list :使用 Dockerfile 创建
- -m, --message string :提交信息
- -p, --pause :提交时暂停容器运行
使用 Dockerfile 创建镜像
Dockerfile 是一个文件,内容由一行行命令语句构成,主要分为四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
- # 使用基础镜像
- FROM ubuntu:latest
- # 设置时区
- ENV TZ=Asia/Shanghai
- RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
- # 设置镜像的作者信息
- #LABEL maintainer="Your Name <your.email@example.com>"
- # 暴露容器的端口。非必需
- #EXPOSE 80
- # 定义环境变量
- #ENV ENV_VARIABLE_NAME=value
- # 执行更新操作并安装基本软件包。非必需
- #RUN apt-get update && \
- # apt-get install -y \
- # software-properties-common \
- # build-essential \
- # curl
- # 设置工作目录
- WORKDIR /app
- # 复制本地文件到容器中
- COPY . /app
- # 执行容器启动时的命令
- CMD ["command", "arg1", "arg2"]
- # 或者,如果需要以可执行文件形式运行应用程序
- # CMD ["./your_executable"]
- # 或者,如果是需要通过ENTRYPOINT启动的服务
- # ENTRYPOINT ["entrypoint_script.sh"]
复制代码
指令分析
指令分析FROM指定所创建镜像的基础镜像MAINTAINER维护者信息RUN运行命令CMD启动容器时默认执行命令LABEL标签信息EXPOSE声明镜像内服务所监听的端口ENV环境变量ADD复制指定路径下的内容到容器中的路径下,可以为URL,也可以是文件路径,如果为tar文件,会主动解压COPY复制宿主机的定路径下的内容到容器中的路径下USER运行容器时的用户名WORKDIR设置工作目次ARG指定镜像内使用的参数
构建应用
需求:构建一个 Web 应用,通过 docker 来运行
步骤:
- 使用 SpringBoot 搭建应用,并提供一个 REST 接口
- @RestController
- public class HelloController {
- @GetMapping("/hello")
- public String hello(){
- return "Hello Docker!";
- }
- }
复制代码 - 将应用打包成 jar 包
- 将 jar 包上传到 Linux 服务器
- 构建 dockerfile 文件
创建 Dockerfile 文件
编辑内容如下:
- # Spring Boot 运行需要依赖java
- FROM java:8
- # 复制jar包到容器中
- COPY docker-demo-0.0.1-SNAPSHOT.jar docker-demo-0.0.1-SNAPSHOT.jar
- # 运行命令
- CMD java -jar docker-demo-0.0.1-SNAPSHOT.jar
复制代码
创建镜像
编写完成Dockerfile后,可以通过以下命令来创建镜像:
主要参数如下:
- -f :指定 Dockerfile 路径,默认为当前目次
- -t :指定天生镜像的标签信息
示例:
- # 最后的.表示当前目录
- docker build -t mywebapp:1.0 .
复制代码 构建过程:
- # 查看镜像
- docker images
- # 启动镜像
- docker run -d -p 8080:8080 mywebapp:1.0
复制代码 打开欣赏器访问
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |