Docker 入门教程学习笔记

| author beyondsky  | categories 读书笔记   | tags docker  

本文是学习 docker 入门教程 的笔记,是对于原有教程的学习过程的总结记录,
并对于学习中遇到的问题进行了解决,更具有实践性,但是解释偏少(可以看原文)。
这个笔记只是非常基础的部分,而且 docker 发展迅速,
故还有很大的整理、扩充空间,目前只是适合初学者简单了解之用途。


简介

Docker - 轻量级容器,可以轻易实现生产环境部署。

应用场景:

  • web 应用自动化打包、发布
  • 自动化测试和持续集成、发布
  • 在服务型环境中部署和调整数据库或者其他的后台应用
  • 搭建自己的 PaaS 环境

Docker 组成:

  • 服务端: 服务进程,管理所有容器
  • 客户端: 服务端的远程控制器

一般服务端和客户端在同一台机器上运行。

查看 docker 版本:

$sudo docker version

使用 shadowsocks

请注意该部分的前提是已经有可用的 shadowsocks 代理,
如果尚不具备请先谷歌了解,已有很多教程。
或者可以采用其他方式提供 socks5 代理,即可按照如下步骤进行配置;
或者可以采用其他方式提供 http 代理,则只需要从第 4 步开始配置。

1.安装 privoxy 将 socks5 代理转换为 http

$sudo apt-get install privoxy

2.配置代理

$sudo vi /etc/privoxy/config

# 找到并修改如下内容
1314            forward-socks5   /    127.0.0.1:1080 .  # socks5 代理地址
761             listen-address  localhost:8118          # http 代理地址
761             listen-address  0.0.0.0:8118            # 局域网共享

3.重启 privoxy 服务

$sudo service privoxy restart

4.配置 docker 代理

$sudo vi /etc/default/docker

# 找到并修改如下内容
10               export http_proxy="http://127.0.0.1:8118"

5.重启 docker

$sudo service docker restart

Reference:
shadowsocks Privoxy 实现 socks5 代理转 http 代理
docker 创建私有仓库


获取镜像

1.检索镜像

两种方式:

$sudo docker search MIRRORNAME

注意:

  • 镜像名称可以是名称的部分内容,不一定是全称。
  • 错误

Error response from daemon: Get https://index.docker.io/… TLS handshake timeout

这是因为 docker 服务器连接不稳定导致超时,可以尝试重复运行指令。
如果已经按照上一节配置好代理,则一般不会出现此问题,除非代理非常不稳定。

2.下载镜像

镜像名称:

  • 一般镜像: 用户名/镜像名
  • 基础镜像: 镜像名

基础镜像是指经过官方验证,值得信任的镜像,比如 Ubuntu。

下载命令:

$sudo docker pull learn/tutorial
# 或者
$sudo docker pull ubuntu

使用容器

1.在容器中运行 Hello, world!

Docker 容器可以视为沙盒,包括的资源有文件系统/系统类库/shell环境等。
沙盒默认不允许程序,在沙盒中运行一个进程以启动一个容器,该进程是容器的唯一进程。

运行容器的命令:

$sudo docker run learn/tutorial echo "Hello, world!"

2.在容器中安装程序

learn/tutorial 镜像基于 ubuntu,所以可以运行 apt-get 命令来安装程序。
容器停止后,对于容器的修改不会丢失

$sudo docker run learn/tutorial apt-get install -y ping

默认情况下容器无法和命令行交互,因此需要使用 -y 参数确认安装程序。
否则容器会一直等待用户确认是否进行安装,而无法结束。

注意:
学习到这里发现描述与实践不相符,不使用 -y 参数也可以安装 ping,
而且容器停止后并没有保持安装结果,再次运行无法使用 ping 命令。
下一节说明了如何解决该问题


生成与发布镜像

1.保存镜像

在容器中运行命令,发生了对其的修改之后,需要使用 commit 命令建立新的镜像版本。
直接使用原有的镜像名是无法看到对容器的修改的。

$sudo docker ps -l                       # 查看已有的容器 ID
$sudo docker commit 123abc learn/ping    # 指定 ID 号和新的名称即可
$sudo docker run learn/ping ping         # 查看运行效果

注意:
commit 可以指定与原有镜像相同的名称来替换掉原有的镜像,
指定不同的名称来生成新的镜像或者实现重命名。

2.检测镜像状态

使用 ps 参数查看当前运行中的镜像,或者使用 ps -l 查看所有镜像,
然后使用 inspect 查看容器的详细信息。

$sudo docker ps
$sudo docker inspect 123abc

3.发布镜像

发布镜像方便自己和他人使用。
注意:
只能将镜像发布到自己的账号名称之下,也就是镜像名中包含的用户名部分要与自己的一致。

$sudo docker images                       # 查看所有安装的镜像
$sudo docker commit 123abc besky/ping     # 利用 commit 重命名镜像
$sudo docker rmi IMAGEID                  # 删除已有镜像
$sudo docker rm  123abc                   # 如果删除镜像时显示被容器占用,可以先删除容器。

$sudo docker login                        # 登陆远程仓库
$sudo docker push besky/ping              # 推送指定镜像

总结

镜像是以及准备好的环境,可以是操作系统,也可以是一个小程序。
容器是运行镜像的环境,容器与镜像的关系类似于进程之于程序。
每当镜像运行时,启动一个容器,使用 commit 可以保存容器的状态到一个镜像。
学习到的命令有: (默认省略 docker

命令 参数 解释
version   查看 docker 的版本等信息(client + server)
search image 搜索含有参数指定镜像名的镜像
pull user/image 从仓库获取镜像
run user/image 运行镜像
ps -l 查看运行中的容器,-l查看所有容器
inspect id 查看指定容器的状态
commit id user/image 将指定容器保存成指定镜像
images   查看所有安装的镜像
rmi user/image 删除指定镜像
rm id 删除指定容器
login   登陆镜像仓库
push user/image 推送镜像到远程仓库,注意用户名是否一致

注意:
上表中 id 均指容器的 ID,user/image 指镜像名称,对于一些镜像可能只有 image
更多的功能可以使用 docker 或者 man docker 命令查看。


Reference

Docker 入门教程


上一篇     下一篇