Docker 入门学习(3)

Docker 入门学习(3)

参考文献:《第一本Docker书》

1. 镜像管理基本操作

  • 列出镜像
$ sudo docker images

本地镜像都包含在Docker宿主机的/var/lib/docker目录下。

  • 拉取镜像

将镜像从Docker Hub下载到本地。

$ sudo docker pull ubuntu:16.04

拉取的Ubuntu并不是一个完整的操作系统,只是裁剪版,包含最低限度的支持系统运行的组件。

从其他仓库地址拉取:

$ sudo docker pull <registry>/<NAMES:TAG>

例如:$ sudo docker pull hub.c.163.com/public/ubuntu:16.04

  • 查看镜像子命令
$ man docker-images
  • 添加镜像标签
$ sudo docker tag ubuntu:latest wtt-ubuntu:latest
  • 运行带标签的Docker镜像
$ sudo docker run -t -i --name wtt_1604 ubuntu:16.04 /bin/bash
  • 查找镜像

查找所有Docker Hub上公共的可用镜像

$ sudo docker search centos
  • 删除镜像
$ sudo docker rmi wtingting/static_web
  • 删除所有镜像
$ sudo docker rmi 'docker images -a -q'

-f(-force):强制删除镜像,即使有容器依赖它;

-no-prune不要清理未带标签的父镜像。

更改docker镜像名:

$ sudo docker tag ubuntu/apache2 wtingting/apache2
  • 清理镜像
$ sudo docker image prune -f

-a删除所有无用镜像,不光是临时镜像;

-filter只清理符合给定过滤器的镜像;

-f强制删除镜像,而不进行提示确认。

2. 构建镜像

  1. 使用docker commit命令
  2. 本地导入
  3. 使用docker build命令和Dockerfile文件(推荐)

共享和发布镜像:创建Docker Hub账号

登录Docker Hub

$ sudo docker login

退出

$ sudo docker logout
  1. 使用docker commit创建镜像

    • 创建容器
    $ sudo docker run -i -t ubuntu /bin/bash
    
    • 安装Apache
    root@.../# apt-get update
    ...
    root@.../# apt-get install apache2
    ...
    
    • 退出并提交容器
    root@.../# exit
    $ sudo docker commit -m "message" -a "author" <容器ID> 目标镜像仓库/镜像名
    如:
    $ sudo docker commit aec06924a464 ubuntu/apache2
    
    • 检查新创建的镜像
    $ sudo docker images 目标镜像仓库/镜像名
    

    或者

    查看提交镜像的详细信息

    $ sudo docker inspect 目标镜像仓库/镜像名
    
    • 从刚创建的新镜像运行一个容器
    $ sudo docker run -t -i 目标镜像仓库/镜像名 /bin/bash
    
  2. 本地导入

下载了ubuntu-16.04的模板压缩包后,使用如下命令导入:

$ cat ubuntu-16.04-x86_44-minimal.tar.gz | docker import -ubuntu:16.04
  1. Dockerfile定义文件
  • 创建示例仓库:
$ mkdir web
$ cd web
$ touch Dockerfile
  • 编写Dockerfile

DSL(Domain Specific Language)语法。

# version:0.0.1
FROM ubuntu:16.04
MAINTAINER wtt "wtingting@example.com"
RUN apt-get update && apt-get install nginx
RUN echo 'Hi,I am a comtainer'\
	>/usr/share/nginx/html/index.html
EXPOSE 80

指令大写,如FROM;后面跟随参数;

Dockerfile指令按从上到下执行。

每个Dockerfile的第一条指令必须是FROM,FROM指定一个基础镜像;

MAINTAINER 指定作者姓名及邮件;

RUN 运行指定的命令;

EXPOSE 指定向外部公开端口。

  1. 构建新镜像
  • 运行Dockerfile
$ cd web
$ sudo docker build -t="ubuntu/static_web:v0.1" .

-t=仓库/名称:标签

.指定本地目录;也可以指定其他目录,具体方式为:

$ sudo docker build -t="ubuntu/static_web" -f path/to/file

-f指定一个区别于标准Dockerfile的构建源的位置。

3. Dockerfile构建缓存

  • 忽略Dockerfile的构建缓存
$ sudo docker build --no-cache -t="ubuntu/static_web" .

--no-cache表示忽略缓存。

  • 构建缓存

Ubuntu系统Dockerfile模板

FROM ubuntu:16.04
MAINTAINER wtt "wtingting@example.com"
ENV REFRESHED_AT 2020-2-10
RUN apt-get update

ENV设置环境变量。

  • 查看镜像
$ sudo docker images ubuntu/static_web
  • 查看镜像历史
$ sudo docker history <镜像ID/NAMES>

查看镜像的每一层,以及指令。

  • 从新镜像启动容器
$ sudo docker run -d -p 80 --name static_web ubuntu/static_web nginx -g "daemon off;" <长ID>
  • 查看端口映射
$ sudo docker ps -l

或者

$ sudo docker port <容器ID/NAMES> 端口
  • 指定特定端口
$ sudo docker run -d -p 80:8080 --name static_web ubuntu/static_web \
nginx -g "daemon off;"

将容器内的80端口绑定到本地宿主机8080端口上。

-p 127.0.0.1:80:80将容器内的80端口绑定到本地宿主机的127.0.0.1这个IP的80端口。

-P将容器80端口对本地宿主机公开。

Dockerfile指令

4. 推送镜像至Docker Hub

先注册Docker Hub;

在命令行使用docker login登录;登录信息记录在本地~/.docker目录下;

镜像标签前缀必须为用户名。

  • 推送root镜像
$ sudo docker push wtingting/static_web

在命令行使用docker logout登出。

5. Docker迁移

  • 导出镜像
$ sudo docker save wtingting/apache2 > test_image.tar

或者

$ sudo docker save -o test_image.tar wtingting/apache2

之后拷贝镜像文件到待迁移的系统。

  • 开启待迁移系统Docker
$ sudo systemctl restart docker
  • 导入镜像
$ sudo docker load < test_image.tar

或者

$ sudo docker --i test_image.tar
  • 运行镜像
$ sudo docker run -it --name <新建容器名> <导入的镜像名>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值