Docker 笔记

一、Docker 基本概念

Docker 中有三个基本概念:镜像(Image)容器(Container)仓库(Repository)

镜像和容器的关系,就像是代码文件和进程的关系,镜像是静态的文件,容器是镜像运行时的实体。

仓库就是用来保存镜像的, 类似于git。我们可以从中心仓库下载镜像,也可以从自建仓库下载。目前 Docker 官方维护了一个中心仓库 Docker Hub, 类似于github

docker中概念类比的概念
镜像 vs. 容器代码文件 vs. 进程
中心仓库 vs. 自建仓库github vs. gitlab

二、快速使用Docker搭建一个web服务器

1、首先要使用docker run命令启动容器,容器内启动centos
docker run -p 8080:80 --name web-test -i -t centos /bin/bash

这条命令会使用Docker镜像centos来启动一个Docker容器
参数说明:

  • -p选项开放容器的80端口,并将容器的80端口映射到宿主机的8080端口;
  • --name选项指定容器的名称;
  • -i选项使容器以交互模式运行;
  • -t选项为容器重新分配一个伪输入终端,i-t选项通常同时使用。
  • centosdocker镜像的名称,Docker会首先在本机中寻找该镜像,如果本机没有的话,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。同一个镜像可以有多个版本,用tag来区别,可以在镜像名后加:TAG来指定镜像的版本。
  • /bin/bash:放在镜像名后的是在容器中执行的命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
2、在容器中安装Nginx并启动
$ yum install -y nginx
$ nginx  	  #启动nginx

这样就可以在浏览器访问nginx页面了,地址:http://ip:8082
注意:这一步要在容器内的centos的终端里执行。

三、Docker基本命令

3.1 容器相关

docker run = docker create + docker start
docker create: 创建容器
docker start container-name: 重新启动已经创建的容器。
docker attach container-name: 切换到容器的交互模式
docker ps: 列出运行中的容器
docker ps -a : 列出所有状态的容器
docker rm container-id/container-name: 删除容器

3.2 镜像相关

docker images: 列出本地的镜像
docker search:从Docker Hub来搜索镜像
docker rmi IMAGE_NAME: 删除镜像

四、构建Docker镜像

两种创建镜像的方法:

  • 在已经创建的容器内部更新镜像,然后提交这个镜像
  • 使用Dockerfile创建一个新的镜像

4.1 通过更新已有镜像来创建镜像

步骤如下:

  1. 使用已有镜像启动一个容器
  2. 在运行的容器内更新内容
  3. docker commit 提交本地镜像
  4. 上传到公共仓库

具体命令如下:

# 使用镜像centos:7启动一个容器
[host]$ docker run -i -t --name new-centos centos:7 /bin/bash
# 在容器内部新建文件夹
[container]$ mkdir /home/easonsun
# centos镜像没有安装vim, 在容器中安装vim
[container]$ yum install -y vim
# 新建文件并写入内容
[container]$ vim /home/easonsun/easonsun.txt
# 退出容器
[container]$ exit
# 使用docker commit 提交镜像, 使用docker ps -a 查看容器id
[host]$ docker commit -m="download vim" -a="easonsun" container-id easonsun/centos:v1
# 查看提交的镜像
[host]$ docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
easonsun/centos                      v1                  01b82ef011ab        2 seconds ago       376MB
# 可以看到刚刚提交的镜像,现在可以使用这个镜像来启动容器,启动的容器内部已经下载了download, 并且存在我们刚刚写的easonsun.txt文件。

docker commit命令选项解释:

  • -m:本次提交的描述信息
  • -a: 指定镜像的作者
  • container-id: 容器id, 使用docker ps -a查看
  • easonsun/centos:v1: 指定创建的镜像名和TAG.

将镜像保存到本机之后,可以push到docker hub上:

# 首先登陆docker hub账号
$ docker login    # 输入docker hub用户名密码
# 将镜像push到docker hub
$ docker push image-name:tag  

注意推送镜像到docker hub时,镜像名中要含有docker hub Uername/, 否则会推送失败。例如:dockerhub的用户名是easonsun, 那么镜像名要以easonsun/开头。

4.2 使用Dockerfile构建镜像

可以使用docker bulid命令从零开始构建一个新的镜像,使用docker build命令首先需要有个Dockerfile文件,类似于使用ma ke命令构建可执行文件,需要有个Makefile文件。Dockerfile文件中包含一组指令来告诉Docker怎么构建镜像。

Dockerfile的语法中有两个关键字,分别是FROMRUN

  • FROM: 后面跟一个镜像名, 使用Dockerfile定制的镜像都是基于FROM后面的镜像,可以认为FROM后面的是一个基础镜像,后续的RUN操作都是基于这个基础镜像做的。
  • RUN:用于执行后面跟着的命令行命令。每执行一个RUN指令,dock er都会在原来的镜像上新建一层镜像。所以为了减少过多无意义的层,可以使用&&符号将多个命令行命令放在一个RUN指令中。例如:
FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值