微服务#3 Docker常用命令

Docker

一.初识docker

Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?

  • Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像
  • Docker应用运行在容器中,使用沙箱机制,相互隔离

Docker如何解决开发、测试、生产环境有差异的问题?

  • Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

Docker是一个快速交付应用、运行应用的技术:

  1. 可以将程序及其依赖、运行环境一起打包为一个镜像, 可以迁移到任意Linux操作系统
  2. 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
  3. 启动、移除都可以通过一行命令完成,方便快捷 

Docker和虚拟机的差异:

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

Docker中的一些概念

镜像:

  • 将应用程序及其依赖、环境、配置打包在一起

容器:

  • 镜像运行起来就是容器,一个镜像可以运行多个容器

Docker结构:  

  • 服务端(Server):接收命令或远程请求,操作镜像或容器
  • 客户端(Client):发送命令或者请求到Docker服务端

DockerHub:

  • 一个镜像托管的服务器,类似的还有阿里云镜像服务,统称为DockerRegistry  

Docker基本操作

镜像(image)常用命令

  • docker images 查看当前镜像
  • docker rmi 删除镜像
  • docker pull 拉取镜像(没有指定版本的话,默认是最新的)
  • docker push 上传镜像
  • docker save 保存镜像
  • docker load 读取镜像

容器(container)常用命令

docker run: 创建并运行一个容器

docker run --name mn -p 8080:80 -d nginx

命令解读

  • --name: 给容器起一个名字,比如叫做mn
  • -p: 将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  • -d: 后台运行容器
  • nginx: 镜像的名称

docker exec: 进入容器执行命令

docker exec -it mn bash

命令解读:

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

docker ps: 查看容器状态 (添加-a参数 查看所有状态的容器)

docker logs: 查看容器日志命令 (添加-f参数可以持续查看日志)

docker stop 容器名 : 停止容器

docker rm 容器名: 删除容器 (添加-f参数 可以删除运行中的容器)

数据卷(volume)常用命令

dorker volume[COMMAND]
docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:

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

数据卷挂载

在创建容器时添加-v参数

docker run --name mn -p 8080:80 -v html:/usr/share/nginx/html -d nginx (注意:/usr/share/nginx/html 这个是官方提供的镜像中的html目录位置)

目录挂载

docker run \
> --name mysql \
> -e MYSQL_ROOT_PASSWORD=root \
> -p 3307:3306 \
> -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
> -v /tmp/mysql/data:/var/lib/mysql \
> -d \
> mysql:5.7.25

镜像是分层结构,每一层称为一个Layer

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

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像, 每一个指令都会形成一层Layer

  • FROM   指定基础镜像   FROM centos:6
  • ENV   设置环境变量,可在后面指令使用   ENV key value
  • COPY   拷贝本地文件到镜像的指定目录   COPY ./mysql-5.7.rpm /tmp
  • RUN   执行Linux的sheLl命令,一般是安装过程的命令   RUN yum install gcc
  • EXPOSE   指定容器运行时监听的端口,是给镜像使用者看的   EXPOSE 8080
  • ENTRYPOINT   镜像中应用的启动命令,容器运行时调用   ENTRYPOINT java -jar xx.jar
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
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

DockerCompose有什么作用?
帮助我们快速部署分布式应用,无需一个个微服务去
构建镜像和部署

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值