Docker入门笔记

初识Docker

1 是什么

2 能干嘛

3 去哪下

4 怎么玩

5 永远的helloworld跑起来一次

1 是什么

为什么会有docker出现

Docker入门笔记_第1张图片
Docker入门笔记_第2张图片

Docker理念

Docker入门笔记_第3张图片
Docker入门笔记_第4张图片

一句话

解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术

容器与虚拟机比较

虚拟机技术

Docker入门笔记_第5张图片
Docker入门笔记_第6张图片

容器虚拟化技术

Docker入门笔记_第7张图片
Docker入门笔记_第8张图片
在这里插入图片描述

总结

Docker入门笔记_第9张图片

2 能干嘛

开发运维合二为一

Docker入门笔记_第10张图片

更快速的应用交付和部署

在这里插入图片描述

更便捷的升级和扩缩容

在这里插入图片描述

更简单的系统运维

在这里插入图片描述

更高效的计算资源利用

在这里插入图片描述
Docker入门笔记_第11张图片

Docker的基本组成

Docker入门笔记_第12张图片

镜像

Docker入门笔记_第13张图片

容器

Docker入门笔记_第14张图片

仓库

Docker入门笔记_第15张图片

总结

Docker入门笔记_第16张图片

Docker工作原理

入门

Docker入门笔记_第17张图片
Docker入门笔记_第18张图片

架构

3 Docker安装

1.检查安装环境的条件

Docker入门笔记_第19张图片

Docker入门笔记_第20张图片

打印当前系统相关信息

cat /etc/redhat-release

查看内核版本

uname -r

2.安装

https://blog.csdn.net/qq_22211217/article/details/80414227

3.配置镜像加速器

阿里云镜像加速器

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

Docker命令

docker命令大全(新手必备)https://blog.csdn.net/anqixiang/article/details/114001509

服务相关

启动docker

systemctl start docker

查看docker状态

systemctl status docker

停止docker

systemctl stop docker

重启docker

systemctl restart docker

开机自启

systemctl enable docker

关闭自启

systemctl disable docker

镜像相关

查看镜像

docker images
docker images -q #查看所有镜像的id
docker images	[REPOSITORY[:TAG]]		#查看指定镜像的信息
REPOSITORY		镜像的仓库源(名字)
TAG				镜像的标签(版本)
IMAGE ID		镜像的ID
CREATED			镜像的创建时间
SIZE			镜像的大小

在这里插入图片描述

搜索xxx镜像

docker search xxx

Docker入门笔记_第21张图片

拉取镜像

从Docker 仓库下载镜像到本地,镜像名称格式为名称:版本号,如果版本号不指定则是最新的版本。如果不知道镜像版本,可以去**docker hub** 搜索对应镜像查看

docker pull 名称:版本号

删除镜像

删除本地镜像

docker rmi 镜像id/名称号:版本号 #删除指定本地镜像
docker rmi 'docker images -q' #删除所有本地镜像

查看镜像版本信息

思想:通过docker image inspect的命令查看镜像信息,通过grep过滤想要的版本数据

docker image inspect (docker image名称):latest|grep -i version

容器相关

查看容器

docker ps 	#查看正在运行的容器
docker ps -a 	#查看所有容器

CONTAINER ID		容器ID,在同一宿主机上是唯一的
IMAGE				说明容器是用哪个镜像起的
COMMAND				容器启动后执行的第一个shell命令
CREATED				容器已创建了多久
STATUS				容器在Up状态持续的时间
PORTS				容器默认开放的端口,在Dockfile中通过EXPOSE指定
NAMES				容器名字,具有唯一性

创建并启动容器

docker run 参数 版本:版本号 #默认为/bin/bash 

Docker入门笔记_第22张图片

进入容器

docker exec 参数 #退出容器,容器不会关闭

启动容器

docker start NAME或id

停止容器

docker stop NAME或id

删除容器

docker rm NAME或id
docker rm 'docker ps -aq'	#删除所有容器

查看容器信息

docker inspect NAME或id

容器数据卷

数据卷概念

【Docker篇】深度理解容器数据卷,匿名挂载和具名挂载,数据卷容器

Docker入门笔记_第23张图片

配置数据卷

创建容器时,使用-v参数,设置数据卷

docker run ... -v 宿主机目录(文件):容器内目录(文件) ...
  • 注意事项:
    1. 目录必须是绝对路径
    2. 如果目录不存在,会自动创建
    3. 可以挂载多个数据卷

Docker入门笔记_第24张图片

数据卷容器

Docker入门笔记_第25张图片

c3容器(数据卷容器)挂载了一个数据卷,c1、c2挂载c3,相当于c1、c2也挂载了该数据卷,且当c3挂了之后,c1、c2依然挂载该数据卷

配置数据卷容器

  1. 创建启动c3数据卷容器,使用-v参数 设置数据卷

    docker run -it --name=c3 -v /volume centos:7 /bin/bash
    
  2. 创建启动c1 c2容器,使用--volumes-from参数 设置数据卷

    docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
    docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
    

小结

Docker入门笔记_第26张图片

应用部署

Mysql

Docker入门笔记_第27张图片
Docker入门笔记_第28张图片

详细步骤

  1. 搜索mysql镜像

    docker search mysql
    
  2. 拉取mysql镜像

    docker pull mysql:5.6
    
  3. 创建容器,设置端口映射、目录映射

    # 在/root目录下创建mysql目录用于存储mysql数据信息
    mkdir ~/mysql
    cd ~/mysql
    
    docker run -id \
    -p 3307:3306 \
    --name=c_mysql \
    -v $PWD/conf:/etc/mysql/conf.d \
    -v $PWD/logs:/logs \
    -v $PWD/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    mysql:5.6
    
    • 参数说明
      • -p 3307:3306:将容器的3306端口映射到宿主机的3307端口
      • --v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的conf/my.cnf挂载到容器/etc/mysql/my.cnf配置目录
      • -v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs目录日志
      • -v $PWD/data:/var/lib/mysql:将主机当前目录下的data目录挂载到容器的/var/lib/mysql数据目录
      • -e MYSQL_ROOT_PASSWORD=123456:初始化root 用户密码
  4. 启动mysql容器

docker exec -it c_mysql /bin/bash

登录mysql

mysql -uroot -p123456

5.使用外部机器访问MySQL
Docker入门笔记_第29张图片

Tomcat

  1. 搜索Tomcat 镜像

    docker search tomcat
    
  2. 拉取mysql镜像

    docker pull tomcat
    
  3. 创建容器,设置端口映射、目录映射

    #在/root目录下创建tomcat目录用于存放tomcat数据信息
    mkdir ~/tomcat
    cd ~/tomcat
    
    docker run -id --name=c_tomcat \
    -p 8080:8080 \
    -v $PWD:/usr/local/tomcat/webapps \
    tomcat
    
    • 参数说明:
      • -p 8080:8080:将容器的8080端口映射到主机的8080端口
      • -v $PWD:/usr/local/tomcat/webapps:将主机中当前目录挂载到容器的webapps
  4. 最后使用外部机器访问tomcat

Nginx部署

  1. 搜索Nginx 镜像

    docker search nginx
    
  2. 拉取mysql镜像

    docker pull nginx
    
  3. 创建容器,设置端口映射、目录映射

    #在/root目录下创建nginx目录用于存储nginx数据信息
    mkdir ~/nginx
    cd ~/nginx
    mkdir conf
    cd conf
    #在~/nginx/conf/下创建nginx.conf文件,粘贴下面代码块的内容
    vim nginx.conf
    
    user  nginx;
    worker_processes  1;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    	
    	include /etc/nginx/conf.d/*.conf;
    }
    
    docker -run -id --name=c_nginx \
    -p 80:800 \
    -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v $PWD/logs:/var/log/nginx \
    -v $PWD/html:/usr/share/nginx/html \
    nginx
    
    • 参数说明:
      • -p 80:800:将容器的80端口映射到宿主机的80端口
      • -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机当前目录下的/conf/nginx.conf挂载到容器的:/etc/nginx/nginx.conf配置目录
      • -v $PWD/html:/usr/share/nginx/html:将主机当前目录挂载到容器的/val/log/nginx日志目录
  4. 使用外部机器访问nginx

Redis部署

  1. 搜索Redis 镜像

    docker search redis
    
  2. 拉取Redis 镜像

    docker pull redis:5.0
    
  3. 创建容器,设置端口映射、目录映射

    docker run -id --name=c_redis -p 6379:6379 redis:5.0
    
  4. 使用外部机器连接redis

    redis-cli.exe -h 192.168.187.129 -p 6379
    

Dockerfile

镜像原理

Docker入门笔记_第30张图片
Docker入门笔记_第31张图片

镜像制作

Docker入门笔记_第32张图片

  • 容器转为镜像

    docker commit 容器id 镜像名称:版本号
    
    docker save -o 压缩文件名称 镜像名称:版本号
    
    docker load -i 压缩文件名称
    

Dockerfile 概念

  • Dockerfile 是一个文本文件
  • 包含了一条条的指令
  • 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
  • 对于开发人员,可以为开发团队提供一个完全一致的开发环境
  • 对于测试人员,可以直接拿开发时所构建的镜像或者通过Dockerfile 文件构建一个新的镜像开始工作了
  • 对于运维人员,在部署时,可以实现应用的无缝移植

Dockerfile 关键字

关键字 作用 备注
FROM 指定父镜像 指定dockerfile基于哪个images构建
MAINTAINER 作者信息 用来标明这个dockerfile 谁写的
LABEL 标签 用来指明dockerfile 的标签,可以使用Label代替Maintainer 最终都是在docker image基本信息中嗯可以查看
RUN 执行命令 执行一段命令 默认是/bin/sh 格式:RUN command 或者 RUN ["command","param1","param2"]
CMD 容器启动命令 提供启动容器时候的默认命令和ENTRYPOINT配合使用。格式:CMD command param1 param2或者CMD ["command","param1","param2"]
ENTRYPOINT 入口 一般在制作一些执行就关闭的容器中会使用
COPY 复制文件 build 的时候复制文件到image中
ADD 添加文件 build 的时候添加文件到iamge 中,不仅仅局限于当前build 上下文 可以来源于远程服务
ENV 环境变量 指定build 时候的环境变量 可以在启动容器的时候 通过-e覆盖 格式:ENV name = value
ARG 构建参数 构建参数 只在构建的时候使用参时 如果有ENV 那么ENV 的相同名字的值始终覆盖ARG 的值
VOLUME 定义外部可以挂载的数据卷 指定build 的image 那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用-v绑定 格式:VOLUME ["目录"]
EXPOSE 暴露端口 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式:EXPOSE 8080或者EXPOSE 8080/udp
WORKDIR 工作目录 指定容器内部的工作目录 如果没有创建则自动创建 如果指定/使用是绝对地址 如果不是/开头那么实在上一条workdir 的路径的相对路径
USER 指定执行用户 指定build 或者启动的时候 用户 在RUN CMD ENTRYPOINT执行的时候的用户
HEALTHCHECK 健康检查 指定监测当前容器的健康测试的命令 基本上没有 因为很多时候 应用本身由健康监测机制
ONBUILD 触发器 当存在ONBUILD 关键字的镜像作为基础镜像的时候 当执行FROM 完成之后 会执行ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
STOPSIGNAL 发送信息量到宿主机 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出
SHELL 指定执行脚本的shell 指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell

案例一

需求:

自定义CentOS7镜像。要求:

  1. 默认登录路径为/usr
  2. 可以使用vim

实现步骤:

  1. 定义父镜像:FROM centos:7
  2. 定义作者信息:MAINTAINER marco
  3. 执行安装vim命令:RUN yum install -y vim
  4. 定义默认的工作目录:WORKDIR /usr
  5. 定义容器启动执行的命令:CMD /bin/bash

创建使用dockerfile的镜像:

docker build -f ./centos_docker -t marco_centos:1 .

案例二

需求:

定义dockerfile,发布springboot 项目

实现步骤:

  1. 定义父镜像:FROM java:8
  2. 定义作者信息:MAINTAINER crisp077
  3. 将jar包添加到容器:ADD springboot.jar app.jar
  4. 定义容器启动执行的命令:CMD java -jar app.jar
  5. 通过dockerfile 构建镜像:docker build -f dockerfile文件路径 -t 镜像名称:版本

Docker 服务编排

6.1 服务编排的概念

微服务架构的应用系统中一般包含若干个微服务,每个微服务都会部署多个实例,如果每个微服务都要手动启动,维护工作量会很大

  • 要从Dockerfile build image 或者去 dockerhub 拉取image
  • 要创建多个container
  • 要管理这些container(启动停止删除)

服务编排:

按照一定的业务规则批量管理容器

6.2 Dockers Compose 概述

Docker Compose 是一个编排多容器分布式部署的工具,提供命令集管理器化应用的完整开发期,包括服务构建,启动和停止。使用步骤:

  1. 利用 Dockerfile 定义运行环境镜像
  2. 使用 docker-compose.yml 定义组成应用的各服务
  3. 运行 docker-compose up 启动应用
6.2.1 安装Docker Compose
#Compose 目前已经完全支持Linux、MAC OS、Windows,在安装Compose之前,需要先安装Docker。下面以编译好的二进制包方式安装在Linux中
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-'uname -s'-'uname -m' -o /usr/local/bin/docker-compose
#设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
#查看版本信息
docker-compose -version
6.2.2 卸载Docker Compose
#二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose

6.3 案例

使用docker compose编排nginx+springboot项目

  1. 创建docker-compose目录

    mkdir ~/docker-compose
    cd ~/docker-compose
    
  2. 编写docker-compose.yml文件

    version: '3'
    services:
      nginx:
       iamge: nginx
       ports:
        - 80:80
       links:
        - app
       volumes:
       	- ./nginx/conf.d:/etc/nginx/conf.d
       app:
         image: app
         expose:
           - "8080"
    
  3. 创建./nginx/conf.d目录

    mkdir -p ./nginx/conf.d
    
  4. ./nginx/conf.d目录下编写crisp.conf文件

    server {
    	listen 80;
    	acess_log off;
    	
    	location / {
    		proxy_pass https://app:8080;
    	}
    	
    }
    
  5. ~/docker-compose目录下 使用dockers-compose 启动容器

    docker-compose up
    
  6. 测试访问

    http://192.168.187.129/hello
    

Docker 私有仓库

7.1 搭建私有仓库

Docker 私有仓库

  • Docker 官方的Docker hub(https://hub.docker.com)是一个用于管理公共镜像的仓库,我们可以从上面拉取镜像到本地,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜像放到公网当中,那么我们就需要搭建自己的私有仓库来存储和管理自己的镜像。

私有仓库搭建

  1. 拉取私有仓库镜像

    docker pull registry
    
  2. 启动私有仓库容器

    docker run -id --name=registry -p 5000:5000 registry
    
  3. 打开浏览器,输入地址https://私有仓库服务器ip:5000/v2/_catalog看到{"repositories":[]}表示私有仓库搭建成功

  4. 修改deamon.json

    vim /etc/docker/daemon.json
    #在上述文件中添加一个key,保存退出。
    #此步用于让docker信任私有仓库地址
    #注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
    {"insecure-registries": ["私有仓库服务器ip:5000"]}
    
  5. 重启docker 服务

    systemctl restart docker
    docker start registry
    

7.2 上传镜像到私有仓库

  1. 标记镜像为私有仓库的镜像

    docker tag centos:7 私有仓库服务器ip:5000/centos:7
    
  2. 上传标记的镜像

    docker push 私有仓库服务器ip:5000/centos:7
    

7.3 从私有仓库拉取镜像

#拉取镜像
docker pull 私有仓库服务器ip:5000/centos:7
建**

1. 拉取私有仓库镜像

   ```shell
   docker pull registry
  1. 启动私有仓库容器

    docker run -id --name=registry -p 5000:5000 registry
    
  2. 打开浏览器,输入地址https://私有仓库服务器ip:5000/v2/_catalog看到{"repositories":[]}表示私有仓库搭建成功

  3. 修改deamon.json

    vim /etc/docker/daemon.json
    #在上述文件中添加一个key,保存退出。
    #此步用于让docker信任私有仓库地址
    #注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
    {"insecure-registries": ["私有仓库服务器ip:5000"]}
    
  4. 重启docker 服务

    systemctl restart docker
    docker start registry
    

7.2 上传镜像到私有仓库

  1. 标记镜像为私有仓库的镜像

    docker tag centos:7 私有仓库服务器ip:5000/centos:7
    
  2. 上传标记的镜像

    docker push 私有仓库服务器ip:5000/centos:7
    

7.3 从私有仓库拉取镜像

#拉取镜像
docker pull 私有仓库服务器ip:5000/centos:7

你可能感兴趣的:(JavaWeb,docker,运维,容器)