一、基本介绍
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 centosUsing default tag: latestlatest: Pulling from library/centos7b6bb4652a1b: Pull complete Digest: sha256:c1010e2fe2b635822d99a096b1f4184becf5d1c98707cbccae00be663a9b9131Status: Downloaded newer image for centos:latest
可以通过制定tag来获取特定版本的某一个镜像,如果不指定tag的话,默认获取的是latest标签的镜像
2.查看镜像信息
$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEcentos 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 mysqlNAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql 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:v2Failed 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 imagesREPOSITORY TAG IMAGE ID CREATED SIZEcentos latest 36540f359ca3 4 days ago 192.5 MBubuntu 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.txtroot@e305f234749f:/# exitexit$ sudo docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESe305f234749f 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_commitsha256:aaeb6a41e5f9ff46e2c4db3a26ac6f78a307d2b6ab71380f1df3a46e9ede2313$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEtest_commit latest aaeb6a41e5f9 4 seconds ago 188 MBcentos latest 36540f359ca3 4 days ago 192.5 MBubuntu 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:/# exitexit$ sudo docker run -idt ubuntu6344cef145b4ac1b5dc644a92942fe7d11a1bf928223bb7b4bcb536a6eec0772$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6344cef145b4 ubuntu "/bin/bash" 7 seconds ago Up 6 seconds elegant_shannonyangyang@yangyang-VirtualBox:~$ sudo docker exec -ti 6344cef145b4 /bin/bashroot@6344cef145b4:/# lsbin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
3.导入和导出容器
使用export和import命令
$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6344cef145b4 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.0sha256:993bc5eff095c98e4db4bd5b475e1ad0ce10b1b253187e7251fd15f1ea21ee47yangyang@yangyang-VirtualBox:~$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEtest/ubuntu v1.0 993bc5eff095 4 seconds ago 97.34 MB