docker学习笔记2021-2-17

Docker

一、概述

docker容器的背景及优点不做赘述

docker为go语言开发的一种容器技术,主要用于解决项目"水土"不服问题

二、安装docker

在linux系统中使用yum安装

  1. 将yum更新到最新

    yum update
    
  2. 安装需要的软件包

    yum install -y yum-utils device-mapper-persistent-data lvm2
    
  3. 设置yum源

    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
  4. 安装docker

    yum install -y docker-ce
    
  5. 查看docker版本,检验是否成功

    docker -v
    

三、命令

  1. 服务相关命令

    • 启动docker服务

      systemctl start docker
      
    • 停止docker服务

      systemctl stop docker
      
    • 重启docker服务

      systemctl restart docker
      
    • 查看docker服务状态

      systemctl status docker
      
    • 开机启动docker服务

      systemctl enable docker
      
  2. 镜像相关命令

    • 查看镜像

      docker images
      
    • 搜索镜像

      docker search 镜像名称
      
    • 拉取镜像

      docker pull 镜像名称:版本号
      
    • 删除镜像

      docker rmi 镜像名称:版本号
      
  3. 容器相关命令

    • 查看容器

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

      docker run -it --name=centos centos:latest  /bin/bash
      
      • -i:保持容器运行
      • -t:为容器重新分配一个伪输入终端
      • -d:以守护进程模式运行容器,退出后容器不会停止
      • -it:创建一个交互式容器,推出后容器容器停止运行
      • -id:创建一个守护容器;退出后容器不停止运行
      • –name:为创建的容器命名
    • 进入容器

      docker exec -it 容器名称 /bin/bash
      
    • 启动容器

      docker start 容器名称  
      
    • 停止容器

      docker stop 容器名称  
      
    • 删除容器

      docker rm 容器名称
      
      docker rm `docker ps -aq`  #产出所有容器
      
    • 产看容器信息

      docker inspect 容器名称
      

四、数据卷

1.数据据卷是什么?

  • 数据卷是宿主机中的一个目录或文件
  • 当容器目录和数据目录绑定后对方的修改会同步(双向同步)
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器可以被挂载多个数据卷

2.数据卷作用:

  • 容器数据持久化
  • 外部机器和容器**间接**通信
  • 容器间数据交换

3.配置数据卷

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

docker run ...  -v 宿主机目录(文件):容器内目录(文件)

注:

  1. 目录必须是绝对路径
  2. 如果目录不存在,会自动创建
  3. 可以挂载多个数据卷

数据卷容器

数据卷容器可以时多个容器间进行数据操作

原理:多个容器挂载到同一个数据卷容器上,数据卷再挂载到一个数据卷,即可实现

  1. 创建数据卷容器

    docker run -it --name=c3 -v /volume centos:latest
    
  2. 创建普通容器

    docker run -it --name=c1 --volumes-from c3 centos:latest
    docker run -it --name=c2 --volumes-from c3 centos:latest
    

五、应用部署

Mysql:

  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=n_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目录(数据卷)挂载到mysql/conf配置目录下
    • $PWD/logs:/logs:同上,挂载日志
    • v $PWD/data:/var/lib/mysql:同上挂载数据
    • e MYSQL_ROOT_PAWSSWORD=123456:设置root用户的密码
  4. 操作docker容器

在这里插入图片描述

*使用远程连接docker数据库时,ip为宿主机ip;端口为docker容器绑定的宿主机开放端口;密码为设置的密码

tomcat:

  1. 搜索

    docker search tomcat
    
  2. 拉取

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

    #在/root目录下创建tomcat目录用于存储tomcat数据信息
    mkdir ~/tomcat
    cd ~/tomcat
    
    docker run -id --name=n_tomcat \
    -p 8080:8080 \
    -v $PWD:/usr/local/tomcat/webapps \
    tomcat
    

    tips1:本人在创建时未拉取的镜像,容器会自动拉取对应的镜像

    tips2:在访问时会出现404,原因为:webapps下为空,所以无法访问;在镜像的tomcat目录下有两个目录:webapps.dist和webapps,删除webapps(如果由挂载数据卷将无法删除)并将dist改为webapps即可访问

六、dockerfile

docker镜像概念:本质为叠加的文件系统

Docker容器转为镜像:

  • docker commit 容器id  自定义镜像名称:自定义版本号
    

在这里插入图片描述

将镜像转为文件:

  • docker save -o 压缩文件名称 镜像名称
    

在这里插入图片描述

将镜像压缩文件转为镜像:

  • docker load -i 压缩文件名称
    

注:在将容器转化为镜像后,再还原为容器将不包含原挂载的数据卷中的数据,而放置在容器中的数据则还在

Dockerfile概念:

dockerfile是一个文本文件,包含了一些指令集;每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。

dockerfile创建案例:

  1. 案例一

    需求:

    • 默认登录路径为/usr
    • 可以使用vim

    dockerfile实现:

    • 定义父镜像:FROM centos:latest
    • 定义作者信息:MAINTAINER zjj_centos
    • 执行安装vim命令:RUN yum install -y vim
    • 定义默认的工作路径:WORKDIR /usr
    • 定义容器启动执行的命令:CMD /bin/bash

    dockerfile文件创建完成后使用命令,即可安装镜像:

    docker build -f dockerfike文件名 -t 自定义镜像名:自定义版本号 .
    

    使用该镜像创建容器即可达到目标效果:

在这里插入图片描述

  1. 案例二

    需求:

    定义dockerfile,发布springboot项目

    dockerfile实现:

    • 定义父镜像,springboot需要java环境:

      FROM java:8
      
    • 作者信息:

      MAINTAINER j_springboot_docker
      
    • 添加springboot项目并更改名字(这里项目与dockerfile文件在同一目录):

      ADD springboot01-1.0-SNAPSHOT.jar app.jar
      
    • 命令(运行springboot项目)

      CMD java -jar app.jar
      

    tips:没有指定的父镜像,将会自动下载

    dockerfile文件创建完成后使用命令,即可安装镜像:

    docker run -id -p 8000:8080 springboot
    

    tips:创建容器时需要将springboot内嵌tomcat8080端口映射到宿主机的端口;此外:本人在操作时发现无法访问该项目,经排查发现是因为我在springboot项目中的application.yml文件中指定端口为8000,所以不能使将宿主机端口映射到8080,而是映射到8000

七、服务编排

八、私有仓库

  • 搭建私有仓库

    1. 拉取私有仓库镜像

      docker pull registry
      
    2. 启动私有仓库

      docker run -id --name=registry -p 5000:5000 registry
      
    3. 浏览器访问:http://私有仓库ip:5000/v2/_catalog,可有看到所具有的镜像

    4. 修改daemon.json

      vim /etc/docker/daemon.json
      #添加 ["私有仓库ip:5000"]
      
    5. 重启docker服务

      systemctl restart docker
      docker start registry
      
  • 将镜像上传至私有仓库

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

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

      docker push 私有仓库ip:5000/centos:latest
      
  • 从私有仓库拉取镜像

    docker pull 私有仓库ip:5000/镜像名称:版本号
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值