应用快速部署
Nginxdocker run -d -p 80:80 nginx 使用浏览器访问虚拟机地址 
Redisdocker pull redisdocker run --name redis -d -p 6379:6379 redis 可以使用 Redis 客户端工具连接 
连接成功可以看到服务器信息 
MySQL企业中用得最多的是 MySQL 5.7 版本 docker pull centos/mysql-57-centos7# MYSQL_ROOT_PASSWORD是设置默认登录用户名和密码都是rootdocker 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/ROOTcd /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/ShanghaiRUN 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 接口 @RestControllerpublic class HelloController { @GetMapping("/hello") public String hello(){ return "Hello Docker!"; }} - 将应用打包成 jar 包
- 将 jar 包上传到 Linux 服务器
- 构建 dockerfile 文件
创建 Dockerfile 文件编辑内容如下: # Spring Boot 运行需要依赖javaFROM 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 打开浏览器访问 
下载地址: Nginx设置Access-Control-Allow-Origin多域名跨域实现 Docker File创建镜像失败ERROR [3/4] RUN yum -y instal |