为什么用docker?
大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:

  • 依赖关系复杂,容易出现兼容性问题
  • 开发、测试、生产环境有差异

docker如何解决部署中产生的问题?
Docker为了解决依赖的兼容问题的,采用了两个手段:

  • 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包
  • 将每个应用放到一个隔离容器去运行,避免互相干扰

Docker如何解决不同系统环境的问题?
Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包
Docker运行到不同操作系统时,直接基于打包的函数库,借助于操作系统的Linux内核来运行
Docker和虚拟机的差异:

  • docker是一个系统进程;虚拟机是在操作系统中的操作系统
  • docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般

docker命令:
docker安装和启动:
查看docker服务端状态:systemctl status docker
启动docker服务端:systemctl start docker
停止docker服务端 :systemctl stop docker
重启docker服务端 :systemctl restart docker
开机启动docker服务端:systemctl enable docker
镜像:
docker images 查看镜像列表
docker rmi 镜像名称或镜像id 删除镜像
docker rmi -f 镜像名称或镜像id 强制删除镜像
docker rmi docker images -q 删除全部镜像
docker pull 镜像名称 拉取镜像
docker push 推送镜像到镜像中心
docker save 将镜像保存为压缩包
docker load 加载镜像
容器:
docker ps 查看运行中的容器列表
docker ps -a 查看所有的容器列表
docker run —name 容器名称 -d -p 8080:8080 镜像名称 创建容器
docker stop 容器名称 停止一个容器
docker start 容器名称 启动一个容器
docker restart 容器名称 重启一个名称
docker pause 容器名称:让一个运行的容器暂停
docker unpause 容器名称:让一个容器从暂停状态恢复运行
docker rm 容器名称:删除一个容器
docker rm -f 容器名称:强制删除一个容器
docker exec -it 容器名称 bash:进入一个容器
docker logs -f 容器名称:持续查看日志
数据卷:
docker volume create 数据卷名称 :创建一个数据卷
docker volume ls:查看所有数据卷
docker volume inspect 数据卷名称:查看数据卷详细信息卷
image.png
docker volume rm 数据卷名称:删除指定数据卷
docker volume prune:删除所有未使用的数据卷

挂载数据卷

image.png

给MySQL挂载本地目录

image.png
基于ubuntu镜像自定以镜像

  1. # 指定基础镜像
  2. FROM ubuntu:16.04
  3. # 配置环境变量,JDK的安装目录
  4. ENV JAVA_DIR=/usr/local
  5. # 拷贝jdkjava项目的包
  6. COPY ./jdk8.tar.gz $JAVA_DIR/
  7. COPY ./docker-demo.jar /tmp/app.jar
  8. # 安装JDK
  9. RUN cd $JAVA_DIR \
  10. && tar -xf ./jdk8.tar.gz \
  11. && mv ./jdk1.8.0_144 ./java8
  12. # 配置环境变量
  13. ENV JAVA_HOME=$JAVA_DIR/java8
  14. ENV PATH=$PATH:$JAVA_HOME/bin
  15. # 暴露端口
  16. EXPOSE 8090
  17. # 入口,java项目的启动命令
  18. ENTRYPOINT java -jar /tmp/app.jar

在Dockerfile所在目录下运行命令:docker build -t 镜像名称 .

基于java8构建Java项目

Dockerfile文件如下:

  1. FROM java:8-alpine
  2. COPY ./app.jar /tmp/app.jar
  3. EXPOSE 8090
  4. ENTRYPOINT java -jar /tmp/app.jar