技术成就梦想

代码如诗

原 荐 docker学习系列一:初识docker 听风的小猪 参与源创会 领取时间:2017-05-13 “源创会”在线下联结了各位 OSCer,推广开源项目和理念,很荣幸有你的参与~ 领取条件:参与过开源中国“源创会”的 OSCer 可以领取

2017年9月11日 nginx 开源项目 0

一、基本介绍

Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。Docker利用Linux核心中的资源分脱机制,例如cgroups,以及Linux核心名字空间(name space),来创建独立的软件容器(containers)。这可以在单一Linux实体下运作,避免引导一个虚拟机造成的额外负担。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括进程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、内存、block I/O与网络。从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的 LXC与systemd – nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施,“Dockers是有能力打包应用程序及其虚拟容器,可以在任何Linux服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公有云、私有云、单机等。”

二、安装过程

centos 7:

yum install docker

Ubuntu 16.04:

sudo apt install docker

三、镜像操作

1.获取镜像

$ sudo docker pull centos
Using default tag: latest
latest: Pulling from library/centos

7b6bb4652a1b: Pull complete 
Digest: sha256:c1010e2fe2b635822d99a096b1f4184becf5d1c98707cbccae00be663a9b9131
Status: Downloaded newer image for centos:latest

可以通过制定tag来获取特定版本的某一个镜像,如果不指定tag的话,默认获取的是latest标签的镜像

2.查看镜像信息

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              36540f359ca3        4 days ago          192.5 MB

repository: 表示来自于哪个仓库,比如centos 仓库

tag: 镜像的标签信息,比如latest

IMAGE ID:镜像的ID号,唯一

CREATED: 创建时间

SIZE: 镜像大小

3.搜寻镜像

使用docker search 可以搜索远端仓库中共享的镜像,默认搜索docker hub 官方仓库中的镜像

$ sudo docker search mysql
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                           MySQL is a widely used, open-source relati...   4603      [OK]       
mysql/mysql-server              Optimized MySQL Server Docker images. Crea...   314                  [OK]
centurylink/mysql               Image containing mysql. Optimized to be li...   52                   [OK]
zabbix/zabbix-server-mysql      Zabbix Server with MySQL database support       42                   [OK]
zabbix/zabbix-web-nginx-mysql   Zabbix frontend based on Nginx web-server ...   23                   [OK]
zabbix/zabbix-proxy-mysql       Zabbix proxy with MySQL database support        8                    [OK]
appcontainers/mysql             Centos/Debian Based Customizable MySQL Con...   8                    [OK]
marvambass/mysql                MySQL Server based on Ubuntu 14.04              7                    [OK]
debezium/example-mysql          Example MySQL database server with a simpl...   6                    [OK]
bitnami/mysql                   Bitnami MySQL Docker Image                      6                    [OK]
dnhsoft/mysql-utf8              Inherits the official MySQL image configur...   5                    [OK]
alterway/mysql                  Docker Mysql                                    3                    [OK]
frodenas/mysql                  A Docker Image for MySQL                        3                    [OK]
drupaldocker/mysql              MySQL for Drupal                                2                    [OK]
yfix/mysql                      Yfix docker built mysql                         2                    [OK]
lysender/mysql                  MySQL base image using Ubuntu 16.04 Xenial      1                    [OK]
xalt/mysql                      Mysql with special Atlassian configuration...   1                    [OK]
keopx/mysql                     MySQL 5.7, 5.6 and 5.5 for Docker. Debian ...   1                    [OK]
tozd/mysql                      MySQL (MariaDB fork) Docker image.              1                    [OK]
nanobox/mysql                   MySQL service for nanobox.io                    0                    [OK]
captomd/mysql                   CaptoMD mysql configuration                     0                    [OK]
cloudposse/mysql                Improved `mysql` service with support for ...   0                    [OK]
1maa/mysql                      MySQL database                                  0                    [OK]
datajoint/mysql                 MySQL image pre-configured to work smoothl...   0                    [OK]
projectomakase/mysql            Docker image for MySQL                          0                    [OK]

4. 删除镜像

使用docker rmi 命令删除镜像

$sudo  docker rmi ubuntu:v2
Failed to remove image (ubuntu:v2): Error response from daemon: conflict: unable to remove repository reference "ubuntu:v2" (must force) - container d63a819c3eaf is using its referenced image a8edd5cf3708
解决方法:
$ sudo docker rm b23dd9de7382   # 删除依赖的container

5.创建镜像

使用docker commit命令,其命令格式为docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

主要选项:

-a 作者信息

-m 提交信息

-p 提交时暂停容器运行

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              36540f359ca3        4 days ago          192.5 MB
ubuntu              14.04               302fa07d8117        12 weeks ago        188 MB
$ sudo docker run -ti ubuntu:14.04 /bin/bash
[sudo] password for yangyang: 
root@e305f234749f:/# touch test.txt
root@e305f234749f:/# exit
exit
$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                          PORTS               NAMES
e305f234749f        ubuntu:14.04        "/bin/bash"              About a minute ago   Exited (0) About a minute ago                       gloomy_torvalds
$ sudo docker commit -m "add a new file" -a "Yangyang"  e305f234749f  test_commit
sha256:aaeb6a41e5f9ff46e2c4db3a26ac6f78a307d2b6ab71380f1df3a46e9ede2313
$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test_commit         latest              aaeb6a41e5f9        4 seconds ago       188 MB
centos              latest              36540f359ca3        4 days ago          192.5 MB
ubuntu              14.04               302fa07d8117        12 weeks ago        188 MB

6.存出和载入镜像

可以使用docker save 和 docker load 命令来存出和载入镜像

$ sudo docker save -o ubuntu_14.04.tar ubuntu:14.04

$ sudo docker load --input ubuntu_14.04.tar

四、容器操作

1.启动容器

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是在终止状态的容器重新启动。所需要的命令主要为docker run

$ sudo docker run -ti ubuntu /bin/bash
[sudo] password for yangyang: 
root@d6a078dc0366:/# 

其中 -t选项让docker分配一个伪终端并绑定到容器的标准输入上,-i则让容器的标准输入打开

有时需要让docker 在后台以守护态的形式运行,可以通过-d参数来实现

2.进入容器

进入容器可以用attach 或者exec命令

$ sudo docker run -ti ubuntu /bin/bash
[sudo] password for yangyang: 
root@d6a078dc0366:/# exit
exit
$ sudo docker run -idt ubuntu
6344cef145b4ac1b5dc644a92942fe7d11a1bf928223bb7b4bcb536a6eec0772
$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
6344cef145b4        ubuntu              "/bin/bash"         7 seconds ago       Up 6 seconds                            elegant_shannon
yangyang@yangyang-VirtualBox:~$ sudo docker exec -ti 6344cef145b4 /bin/bash
root@6344cef145b4:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

3.导入和导出容器

使用export和import命令

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
6344cef145b4        ubuntu              "/bin/bash"         2 minutes ago       Up 2 minutes                            elegant_shannon
$ sudo docker export 6344cef145b4 > test.tar
$ cat test.tar | sudo docker import - test/ubuntu:v1.0
sha256:993bc5eff095c98e4db4bd5b475e1ad0ce10b1b253187e7251fd15f1ea21ee47
yangyang@yangyang-VirtualBox:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test/ubuntu         v1.0                993bc5eff095        4 seconds ago       97.34 MB