Docker

1Docker简介

  • Docker是一个快速交付应用、运行应用的技术:
  • Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像
  • Docker应用运行在容器中,使用沙箱机制,相互隔离
  • Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此,可以在任意Linux操作系统上运行
  • 启动、移除都可以通过一行命令完成,方便快捷

2 Docker与虚拟机的差异

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

3 镜像和容器

  • 镜像(Image):Docker将应用程序及其所需要的依赖、函数库、环境、配置等文件打包在一起,称为镜像。即打包的文件就是镜像
  • 容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。即隔离的进程是容器

4 DockerHub

DockerHub是一个Docker镜像的托管平台。这样的平台称为Docker Registry。

5 Docker基本操作

5.1 镜像常见命令

  • 镜像名称一般分为两部分:[repository]:[tag],例如:mysql:5.7,如果tag没有指定,默认latest,代表最新版本镜像
docker build:构建镜像
docker pull:从服务拉取镜像
docker images:查看镜像
docker rmi:删除镜像 例如:docker rmi nginx:latest
docker push:推送到服务
docker save:保存镜像为一个压缩包 例如:docker save -o nginx.tar nginx:latest
docker load:加载压缩包为镜像 例如:docker load -i nginx.tar
docker --help:查看docker命令
docker images --help:查看docker image命令的用法

5.2 容器常见命令

docker run :创建并运行一个容器
docker pause: 暂停(挂起)容器
docker unpause:运行容器
docker stop:停止容器
docker start:重新开始容器
docker ps:查看所有运行的容器及状态 docker ps -a :查看所有容器,包含运行与不运行的
docker logs:查看容器运行日志 docker logs -f containerName :-f -follow跟踪日志
docker exec:进入容器执行命令
docker rm: 删除指定容器 docker rm -f :强制删除容器

创建容器运行

docker run --name containerName -p 80:80 -d nginx

命令解读:

  • docker run :创建并运行一个容器
  • –name:给容器起一个名字
  • -p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  • -d:后台运行容器
  • nginx:镜像名称,例如nginx
    进入容器内部:
docker exec -it containerName bash

命令解读:

  • docker exec:进入容器内部,执行一个命令
  • -it:给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
  • containerName:要进入的容器名称
  • bash:进入容器后执行的命令,bash是一个linux终端交互命令

5.3 数据卷的基本操作

  • 解决容器与数据耦合的问题,方便操作容器内数据,保证数据安全
  • 数据卷(volume):是一个虚拟目录,指向宿主机文件系统中的某个目录。(/var/lib/docker/volumes/数据卷文件名),容器删除后,数据卷不删除。
    数据卷操作的基本语法如下:
docker volume[COMMAND] 

docker volume命令式数据卷操作,根据命令后跟随的command来确定下一步的操作:

docker volume create   :创建一个volume
docker volume inspect  :显示一个或多个volume的信息
docker volume ls 	     :列出所有的volume
docker volume prune    :删除未使用的volume
docker volume rm       :删除一个或多个指定的volume

5.4 挂载数据卷

  • 如果容器运行时volume不存在,会自动被创建出来
docker run\                      # 创建并运行容器
 --name containerName\           # 给容器起名
 -v html:/usr/share/nginx/html\  # 把html数据卷挂载到容器内的/root/html这个目录中
 -p 8080:80                      # 把宿主机的8080端口映射到容器内的80端口
 nginx:latest\                   # 镜像名称

5.5 目录挂载

  • -v[宿主机目录]:[容器内目录]
  • -v[宿主机文件]:[容器内文件]
    容器的配置目录:
    在这里插入图片描述
    容器的数据储存:
    在这里插入图片描述
docker run \
 --name myMySql \
 -e MYSQL_ROOT_PASSWORD=123456 \
 -p 3306:3306 \
 -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
 -v /tmp/mysql/data:/var/lib/mysql \ 
 -d \
 myslq:laster

6 Dockerfile自定义镜像

6.1 镜像结构

  • 镜像结构:镜像是将应用程序及其需要的系统函数库依赖环境配置打包而成。
  • BaseImage层:包含基本的系统函数库、环境变量、文件系统
  • Entrypoint:入口,是镜像中应用启动的命令
  • 其他:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置

6.2 Dockerfile

  • Dockerfile就是一个文本文件,其中包含一个个的指令(Instrection),用指令来说明要执行什么操作来构建镜像。每个指令都会形成一层Layer。
    在这里插入图片描述
    *dockerfile的编写
# 基础镜像
FROM java:8-alpine
# author
MAINTAINER ruoyi

# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/*.jar /home/ruoyi/ruoyi.jar
# 暴露端口
EXPOSE 8080
# 启动应用
ENTRYPOINT ["java","-jar","ruoyi.jar"]
  • 步骤一:新建一个空文件夹docker-demo
  • 步骤二:拷贝.ruoyi.jar文件到docker-demo这个目录(或者指定目录)
  • 步骤三:将上面编写好的Dockerfile拷贝到docker-demo这个目录
  • 步骤四:进入docker-demo
  • 步骤五:运行命令 docker build -t javaweb:1.0 . # -t指的是-tag版本 .指的是dockerfile所在的目录

6.3 DockerCompose

  • Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和`运行容器
  • Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
  • 部署命令:docker-compose up -d
  • 查看日志:docker-compose logs -f
  • 重启服务:docker-compose restart gateway userservice orderservice
  • DockerCompose就是将docker run命令集合进来的
  • 默认容器互联docker network create some-net
    举例1:
version : '3'
services:
  mysql:  # 容器名称
    image: mysql:5.7.25
    environment:
    	MYSQL_ROOT_PASSWORD:123456
      volumes: .
	      - /tmp/mysql/data:/var/lib/mysql
	      - /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf
   web: # 容器名称
    build: .
    ports:
      - 8090:8090

举例2:
启动elasticsearchkinana

version : '3'
#networks:
#  es:
services:
  elasticsearch:
    container_name: elasticsearch
    image: elasticsearch:7.12.1
    ports:
      - 9200:9200
      - 9300:9300
    volumes:
      - ./es-data:/usr/share/elasticsearch/data
      - ./es-plugins:/usr/share/elasticsearch/plugins
    environment:
      ES_JAVA_OPTS: -Xms512m -Xmx512m
      discovery.type: single-node
    privileged: true
#    networks:
#      - "es"
  kinana:
    container_name: kinana
    image: kibana:7.12.1
    ports:
      - 5601:5601
#    networks:
#      - "es"
    environment:
      ELASTICSEARCH_HOSTS: http://elasticsearch:9200
#    volumes:
#    - ./kibana.yml:/usr/share/kibana/config/kibana.yml

7 Docker镜像仓库

  • Docker Hub
  • 阿里云镜像服务等
    部署私有仓库
    在这里插入图片描述
  • 镜像仓库推送钱需要把仓库地址配置到docker服务的daemon.json文件中,被docker信任
    在这里插入图片描述
  • 推送本地镜像到仓库前都必须重命名(docker tag)镜像,以镜像仓库地址为前缀。
    推送镜像到私有镜像服务必须先tag
  • 步骤一:重新tag本地镜像,名称前缀为私有仓库的地址:127.0.0.1:8080/
docker tag nginx:latest 127.0.0.1:8080/nginx:2.0
  • 步骤二:推送镜像
docker push 127.0.0.1:8080/nginx:2.0
  • 步骤三:拉取镜像
docker pull 127.0.0.1:8080/nginx:2.0

8 修改镜像储存位置

wsl --export docker-desktop d:\docker-desktop.tar
wsl --export docker-desktop-data d:\docker-desktop-data.tar
# stopDocker
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data

wsl --import docker-desktop E:\dockerimages\docker-desktop d:\docker-desktop.tar --version 2
wsl --import docker-desktop-data E:\dockerimages\docker-desktop-data d:\docker-desktop-data.tar --version 2
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逻辑峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值