docker容器、数据卷常用命令、Dockerfile自定义镜像

docker镜像仓库网站 

Docker Hubicon-default.png?t=M4ADhttps://hub.docker.com/容器命令

1.以nginx为例,创建并运行一个nginx容器

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

命令解读:

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

  --name : 给容器起一个名字,比如叫做myNginx

  -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口

  -d:后台运行容器

  lnginx:镜像名称,例如nginx

 2.查看容器日志的命令:

docker logs myNginx  # 添加 -f 参数可以持续查看日志
docker logs myNginx -f 

3.查看容器状态

docker ps
# 添加-a参数查看所有状态的容器,默认查看运行的容器 。
docker ps -a # 查看所有参数

4.停止容器运行

docker stop myNginx

5. 运行容器

docker start myNginx

6.进入容器

docker exec -it myNginx bash

 命令解读:

  docker exec :进入容器内部,执行一个命令

  -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互

  mn :要进入的容器的名称

  bash:进入容器后执行的命令,bash是一个linux终端交互命令

7.删除容器 

docker rm myNginx
# 不能删除运行中的容器,除非添加 -f 参数
docker rm myNginx -f

数据卷命令

数据卷(volume是一个虚拟目录,指向宿主机文件系统中的某个目录。

数据卷操作的基本语法:

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

数据卷的作用:

将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

数据卷操作:

docker volume create

docker volume ls

docker volume inspect

docker volume rm

docker volume prune

挂载数据卷

数据卷挂载的两种方式:

  1.数据卷挂载

  2.目录直接挂载的

在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器目录

docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx

命令解读:

docker run :就是创建并运行容器

   -- name mn :给容器起个名字叫mn

   -v html:/usr/share/nginx/html :html数据卷挂载到容器内的/usr/share/nginx/html这个目录中

   -p 8080:80 :把宿主机的8080端口映射到容器内的80端口

   nginx :镜像名称

如果没有html数据卷,会自动创健一个。

1.docker run 的命令中通过 -v 参数挂载文件或目录到容器中:
        ① -v volume 名称 : 容器内目录
        ② -v 宿主机文件 : 容器内文件
        ③ -v 宿主机目录 : 容器内目录
2. 数据卷挂载与目录直接挂载的优缺点
        ① 数据卷挂载耦合度低,由 docker 来管理目录,但是目录较深,不好找
        ② 目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看

Dockerfile自定义镜像 

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

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

    BaseImage层:包含基本的系统函数库、环境变量、文件系统

    Entrypoint:入口,是镜像中应用启动的命令

    其它:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置

 什么是Dockerfile?

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

基于Ubuntu镜像构建一个新镜像,运行一个java项目:

创健一个新的文件夹,里面放入需要的资源‘

 Dockerfile:

# 指定基础镜像
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

执行命令:

 docker build -t webapp:1.0 .

 如图已经构建成功了。

基于java:8-alpine镜像,将一个Java项目构建为镜像:

将Dockerfile改成如下所示:

# 指定基础镜像
FROM java:8-alpine


COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

再build即可:

 docker build -t webapp:2.0 .

实现思路如下:

新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile

拷贝我们的webapp.jar到这个目录中

编写Dockerfile文件:

        a)基于java:8-alpine作为基础镜像

        b)app.jar拷贝到镜像中

        c)暴露端口

        d)编写入口ENTRYPOINT

使用docker build命令构建镜像

使用docker run创建容器并运行

1. Dockerfile 的本质是一个文件,通过指令描述镜像的构建过程
2. Dockerfile 的第一行必须是 FROM ,从一个基础镜像来构建
3. 基础镜像可以是基本操作系统,如 Ubuntu 。也可以是其他人制作好的镜像,例如: java:8-alpine

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序小白学编程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值