docker的简单使用介绍

文章仅写个人理解,错误之处望请指出,谢谢 ~ (≧▽≦)/ ~

什么是docker

我简单地理解为docker是一个升级版虚拟机,他性能更快,这里不探究docker和虚拟机的区别,也许后续会补充说明~~

使用场景

我们使用docker的时候是想在原有的环境运行其他环境的程序,比如我服务器环境是ubuntu18+mysql8+php8,有一天我需要环境为ubuntu16+mysql5+php5的环境来运行特殊的程序,但我只有一个服务器,这时候就会使用docker来搭建新的环境,打包成镜像,进而通过运行镜像来执行特殊程序脚本
上面只是一种常规的使用方式,从上面的例子我们也可以把这个docker镜像当成手机的一个App。我们制作好App后交予他人使用,别人是不用管App的功能具体是如何实现的,只要App能正常运转即可,因此我们可以扩展其他功能,如php环境我们可以开启加密扩展并在镜像内制定特定的解密密钥,这样我们可以将镜像和加密后的php代码交予合作方。合作方可以正常使用我们提供的功能,但不知道我们代码具体实现
有点啰嗦,,,其他功能不一一列举,自己探索。。。

概念介绍

主要概念有镜像和容器。

镜像可以简单理解为软件安装包,容器则是安装后点击运行的App状态。这里加个状态主要是一个镜像可以开启多个容器,而有同一个镜像开启的容器是可以不一致的。镜像和容器互相独立。
比如docker两次运行ubuntu镜像后会产生两个容器,它们同时存在相互独立,也可以交流。我们可以进入容器1安装nginx,进入容器2安装php,这时候两个容器实现的功能是不一致的,一个是实现nginx进行http监听,另一个是可以执行php脚本,我们可以将nginx接收到的http请求透传给另一个容器来处理php脚本。

安装

可以再ubuntu上运行

sudo apt-get remove docker docker-engine docker.io containerd runc

但这样安装打包镜像会出现问题,我自己在ubuntu18遇见过,因此推荐官网上安装方式
在这里插入图片描述

镜像使用

镜像下载

docker pull image
  • image 镜像ID或镜像名称,包括版本号,如果没明确填写,默认为latest

显示已安装的镜像

   docker images

在这里插入图片描述

  • REPOSITORY 镜像名称
  • TAG 镜像标签,版本号
  • IMAGE ID 镜像唯一ID
  • CREATED 创建时间
  • SIZE 镜像大小

运行镜像

   docker run -it  web:7.0  /bin/bash
  • -run 运行某个镜像的一个实例,后面需要镜像名称或者镜像ID,如果镜像不存在,将从Docker hub下载。镜像名称后无指定标签,如 web 默认使用latest 即 run web 如同 run web:latest
  • -it 表示在交互模式下运行
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

也可以实现其他功能,例如

  sudo docker run --name zto-php-nginx -p 8080:80 \
  -v /var/www:/usr/share/nginx/html:ro \
  -v /zto/conf/default.conf:/etc/nginx/conf.d/default.conf:ro \
  --link php-fpm-zto:php \
  -d nginx  bash home/start.sh
  • -v 挂载文件,将本地文件拷贝覆盖到容器中,使用后容器中可以使用本地文件
  • -p 端口透传,将本地8080端口与docker容器中的80端口建立透传
  • –link 把 php-fpm-zto 的网络并入 zto-php-nginx。
  • -d 后台运行不退出
  • home/start.sh 启动容器时容器内自动运行的脚本。home/start.sh是用户自定义的shell脚本,使用场景如,我自己创建一个web镜像,运行镜像后,产生的容器内没有自动启动nginx和php进程,我可以将 systemctl restart nginx.service 加入到start.sh脚本,如此使用镜像会自动自行start.sh,自动开启nginx进程

删除镜像

 docker rmi image

容器

容器列表

容器是Docker镜像的运行实例,每运行一次镜像会创建一个容器

docker ps

在这里插入图片描述

  • CONTAINER ID 容器ID
  • IMAGE 镜像名称
  • PORTS 建立透传的端口

容器的常规操作

容器的启动/停止/重启

docker start/stop/restart CONTAINER 

容器的删除

docker rm CONTAINER 

容器shell

进入退出容器

docker exec -it CONTAINER  /bin/bash

已交互方式运行镜像时会自动进入容器里,这时候下图红色箭头指向的就是当前容器的容器ID

退出直接在容器shell内执行 exit
在这里插入图片描述

  • CONTAINER 容器ID

构建镜像

构建镜像估计使我们开发使用docker的核心功能。Docker通过读取Dockerfile中的指令,自动构建镜像。Dockerfile是一个用于创建Docker镜像的配置文件,文本格式,里面包含了创建镜像的指令。

命令

docker build  -t image:tag dir
  • -t 给镜像加一个Tag
  • image 构建好的镜像名称
  • tag 版本号,如果没有明确指定,默认为latest
  • dir Dockerfile文件所在路径

Dockerfile

下面为构建一个只有ubuntu18.04的镜像,并将本地Dockerfile文件当前目录下的data目录拷贝入构建的镜像中。
在这里插入图片描述
运行后会自动找基础镜像并下载
在这里插入图片描述
此处为新构建的镜像
在这里插入图片描述

Dockerfile指令

  • FROM 指定基础镜像。FROM nginx 和 FROM ubuntu的区别在于前者有nginx,而后者没有,即便FROM ubuntu,使用镜像启动容器后,容器里是没有服务器自带的常规工具的。无法通过 vim 修改创建文件等。
  • MAINTAINER 镜像构建维护员,谁创建谁修改就谁的。
  • ENV 指令设置容器中的环境变量。DEBIAN_FRONTEND=noninteractive 表示设置所有操作都是非交互式的
  • COPY 构建镜像时将本地目录或文件拷贝到镜像里一起打包。需要拷贝的数据越大,构建速度越慢,构建完的镜像大小也越大
  • RUN 为当前镜像执行命令。apk add --no-cache bash 是允许构建好的镜像使用bash 命令进入
  • CMD 设置容器运行时的默认命令。例如:nginx容器运行时,需要默认启动nginx服务器,可以CMD指令设置。

镜像修改

sudo docker commit -m "修改" -a "zto" 容器ID zto/web:1.0
  • -m 备注,提交的说明信息
  • -a 指定更新的用户信息
  • zto/web:1.0 用户名/镜像名,如果要上传到docker hub需要按这个格式命名

构建后的镜像可能没有最终想要的效果,我们可以使用镜像启动容器,进入容器内修改至我们需要的效果,然后进一步打包成镜像。
如上述新构建的zto-web镜像只有ubuntu的基础框架,我们需要nginx的功能,可以如下操作 :

  1. 使用镜像启动容器,记录容器ID
    在这里插入图片描述2.安装nginx
    在这里插入图片描述
    3.退出保存修改,将容器打包成镜像
    在这里插入图片描述
    4.上传到hub。上传时要用 用户名/镜像名 会自动上传到官网的hub上。 这里我不上传,只做释放,结果是失败的
sudo docker push  user/image:tag

在这里插入图片描述
!!!我们可以搭建私人的hub,但我目前没这种需求,觉得没必要,就不写了!!!

参考

文章仅写个人理解,主要是为了复习和备忘录,并不系统撰写教程(主要是笔者这方面能力还需提高,后续再考虑撰写完整详细的教程)

官方docker hub链接:https://hub.docker.com/

系统的教程和参考链接如下:
https://www.qikegu.com/docs/2970
https://www.runoob.com/docker/docker-dockerfile.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值