Docker学习

  1. Docker 其中包括,镜像、容器、仓库,很简单,目的就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的产品(可以是 web 应用或者数据库应用)及其环境能够做到“一次封装,到处运行”。再通俗点说,我们使用Docker,只需要配置一次Docker容器上面的应用,就可以跨平台,跨服务器,实现应用程序跨平台间的无缝衔接。Docker实际上就相当于一个封闭的沙盒或者是集装箱,它可以把不同的应用全都放在它的集装箱里面,并且以后有需要的时候,可以直接把集装箱搬到其他平台或者服务器上,实现容器虚拟化技术,随用随搬

  2. 镜像和容器

  3. 镜像(image):Docker 将应用程序机器所需依赖、函数库、环境、配置等文件打包在一起,就是硬盘中的文件

  4. 容器:镜像中的应用程序运行后形成的进程就是容器,只是docker会给容器做隔离,外部不可见,容器运行需要写数据,把镜像中的文件复制到自己的容器中再写,就可以实现隔离

  5. DockerHub

  6. 是Docker的镜像托管平台,称为 Docker Registry

  7. 可以利用公开的DockerHub(网易镜像服务、阿里镜像)创建自己的容器,在不同的系统上运行项目

  8. docker架构

  9. docker是CS架构,由服务端和用户端组成

  10. 服务端docker的守护进程,负责处理docker的指令,管理镜像和容器等

  11. 客户端,通过命令(本地)或者RestAPI想docker服务端发送指令,可以在本地或远程向服务端发送指令

  12. 安装docker(CentOS)

  13. Docker分为CE和EE版本,CE为免费,EE为收费

# 1、卸载旧的版本

yum remove docker \

              docker-client \

              docker-client-latest \

              docker-common \

              docker-latest \

              docker-latest-logrotate \

              docker-logrotate \

              docker-engine

\\\# 2、需要的安装包

yum install -y yum-utils

  

\\\# 3、设置镜像的仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  

\\\# 更新yum软件包索引

yum makecache fast

  

\\\# 4、安装docker相关的源 docker-ce 社区 ee 企业版

yum install -y docker-ce

  

\\\# 5、启动docker

systemctl start docker

  

\\\# 6、使用docker version 查看是否安装成功

docker version
```
  1. 配置防火墙端口

  2. 配置国内docker镜像地址,获取地址https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": \\\\\\["https://em2j5stq.mirror.aliyuncs.com"\\\\\\]

}

EOF

systemctl daemon-reload

systemctl restart docker
```
  1. 基本操作

  2. 镜像名称由两部分组成\[repository\]:\[tag\] 比如 mysql:5.7  不加版本号 默认latest

  3. docker build 获取镜像(本地)   docker pull (远程拉取)

  4. docker images 查看当前的镜像

  5. docker rmi 删除镜像

  6. docker push 吧镜像推送到dockerHub

  7. docker save 把镜像保存成一个压缩包

  8. docker load 吧压缩包加载成镜像

  9. docker --help ~ docker images --help

  10. hub.docker.com 查看dockerhub官网镜像可以查看版本 按需

  11. 下载镜像 执行docker pull nginx

  12. docker images查看镜像

  13. 保存镜像 docker save -o nginx.tar nginx:latest

  14. 删除镜像  docker rmi nginx:latest

  15. 导入镜像  docker load -i nginx.tar

  16. 容器相关命令

  17. docker run 容器启动

  18. docker pause 暂停 进程挂起

  19. docker unpause 进程恢复

  20. docker stop  进程杀死

  21. docker start 进程启动

  22. docker ps 查看所有容器及其状态

  23. docker logs 查看容器运行日志

  24. docker exec 进入容器执行命令

  25. docker rm 删除指定容器

  26. 基本操作-容器

  27. 去docker hub 查看nginx的相关命令

  28. image.png

  29. 端口映射 80:80  左边为宿主机的端口,右边为容器端口。访问宿主机80相当于访问容器的80端口,此时容器相当于一个服务器

  30. 进入容器修改文件

  31. image.png

  32. 进入容器之后相当于进入另一个阉割版linux系统,里面有nginx的文件系统,里面基本没有封装的liunx命令

  33. 使用 exit 退出容器

  34. 不建议在容器内部修改文件

  35. 执行redis容器命令。docker exec -it mr redis-cli

  36. 数据卷

  37. 在容器内不便于修改,数据不可复用,操作没有日志,升级维护困难

  38. 数据卷volumes是一个虚拟目录,指向宿主机文件系统中的某个目录

  39. image.png

  40. 数据卷操作语法 docker volume \[command\]

  41. 创建数据卷 docker volume create name

  42. 查看 docker volume ls

  43. 查看存在硬盘中位置  docker volume inspect name

  44. 删除未使用的数据卷  docker volume prune

  45. 删除指定数据  docker volume rm name

  46. 挂在数据卷

  47. 创建一个nginx容器,吧容器文件木目录挂载到volume目录上

  48. docker run – name nginx -p 80:80 -v html:/usr/share/nginx/html -d nginx

  49. -v html:/usr/share/nginx/html  把容器中的/usr/share/nginx/html 挂载到volume的html目录

  50. 在volume的html文件夹下有_data文件夹,对应/usr/share/nginx/html

  51. 操作volume文件相当于操作容器内的文件

  52. 启动容器的时候挂载volume数据卷不存在时会自动创建

  53. 启动mysql 配置密码端口,配置文件映射,数据文件映射

  54. image.png

  55. Dockerfile自定义镜像

  56. 镜像结构

  57. 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成

  58. 镜像分层

  59. image.png

  60. 构建DockerFile文件运行命令

#指定基础镜像

FROM ubuntu: 16.04

#配置环境变量,JDK的安装目录

ENV JAVA_DIR=/usr/local

#拷贝jdk和ljava项目的包

COPY ./jdk8.tar.gz $JAVA_DIR/

COPY ./docker-demo.jar /tmp/app.jar

#安装JDK

RUN cd $JAVA_DIR \

&& tar -xf ./jdk8.tar.gz \

&& mv ./jdk1.8.0_144 ./java8

#配置环境变量

ENV JAVA\\\\\\_HOME=$JAVA\\\\\\_DIR/java8

ENV PATH=$PATH: $JAVA_HOME/bin

#暴露端口

EXPOSE 8090

#入口. java项目的启动命令Ⅰ

ENTRYPOINT java -jar /tmp/app.jar
```
  1. 在Linux中构建,新建文件夹,进入到文件夹,把jdk和程序包放到文件夹中

  2. 执行构建命令  docker build -t javaweb:1.0 .      -t是镜像的tag 最后有个. 千万不能忘记这是dockerfile所在的目录,,表示当前文件夹

  3. 构建后就加入到了docker的镜像中了

  4. 然后就可以根据这个镜像运行容器了

  5. 基于java:8-alpine镜像,配置文件就很简单

  6. ```bash

    指定基础镜像

    FROM java:8-alpine COPY ./docker-demo.jar /tmp/app.jar

    暴露端口

    EXPOSE 8090

    入口. java项目的启动命令Ⅰ

    ENTRYPOINT java -jar /tmp/app.jar ```

  7. 构建镜像,运行

  8. DockerCompose

  9. 可以基于Compose文件帮我们快速部署分布式应用,无需手动一个个创建和运行容器

  10. Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行

  11. compose文件内容就是build run命令

  12. image.png

  13. 可参考官网Compose

  14. centos7安装dockerCompose

  15. 下载

#安装cur1 -L

wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 -O /usr/bin/docker-compose

chmod +x /usr/bin/docker-compose
```
  1. 修改权限 chmod -x docker-compose

  2. 安装compose的补全命令

  3. curl -L https://raw.githubusercontent.com/docker/compose/2.5.0/contrib/completion/bash/docker-compose -o docker-compose

  4. docker-compose执行文件可以分级,每个微服务一个文件夹,每个文件夹下有一个Dockerfile

  5. image.png

  6. 文件夹中的DockerFile,为构建镜像命令

  7. image.png

  8. docker-componse.yaml (结尾一定要yaml)

  9. image.png

  10. 执行命令 docker-compose up 启动

  11. 若是要后台运行: docker-compose up -d 若不使用默认的docker-compose.yml 文件名执行:  docker-compose -f server.yml up -d

  12. docker-compose集群打包之后,每个容器可以通过容器服务名称访问到指定容器

  13. 原来是localhost:8080,访问容器为noacos:8080

  14. 微服务项目打包之前,注意修改application中相关服务的访问地址

  15. docker-compose --help查看相关命令