Docker 基础使用

Published on 2016 - 07 - 08

Docker 基础使用

安装Dcoker

查看系统版本与确认内核

rich@rich-VirtualBox:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.4 LTS
Release:    14.04
Codename:   trusty
#确认系统版本

$ uname -r
4.2.0-27-generic
#确认内核版本

安装依赖包

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

添加Docker源

vim /etc/apt/sources.list.d/docker.list
#根据系统版本,添加下列源

On Ubuntu Precise 12.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-precise main

On Ubuntu Trusty 14.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-trusty main

Ubuntu Wily 15.10
deb https://apt.dockerproject.org/repo ubuntu-wily main

Ubuntu Xenial 16.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-xenial main

安装Docker

sudo apt-get update
sudo apt-get purge lxc-docker
apt-cache policy docker-engine

启动Docker服务并测试

sudo services docker start
sudo docker run hello-world
#注意:这个命令会下载一个test的镜像,可以不运行这个命令

下载一个镜像

sudo docker pull centos:6.7
#我下载了一个centos6.7

查看当前的镜像列表

sudo docker images

进入容器

镜像是一个只读的模板,当我们把镜像运行起来就变成了容器

sudo docker run -i -t fb5054b394b7 /bin/bash
#那一串代码是images的id, 运行sudo docker images后可以看到

sudo docker run -i -t centos:6.7 /bin/bash
#也可以直接使用镜像名启动镜像并进入容器

进入镜像的操作

我这里进入的是centos6.7的镜像,与使用正常系统相同,但是一定要记住一点,

容器内所有的操作,如果不提交成新镜像,当容器关闭后,所有后期操作都会丢失.

每一次操作后都会针对容器生成一个新的ID,然后使用新的ID将容器提交为一个新的镜像.

sudo docker run -i -t centos:6.7 /bin/bash
yum install php
exit
#进入容器做一些操作后退出

查看上一次操作的镜像id

sudo docker ps -l
rich@rich-VirtualBox:~/Desktop/lnmp$ sudo docker ps -l

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
89da8b6d3ba4        centos:6.7          "/bin/bash"         1 minutes ago      Exited (0) 8 seconds ago                       cocky_pike

提交操作过的容器为新的镜像

sudo docker commit 89da8b6d3ba4 centos_php:v1
#注意centos_php为容器名称,v1为tag

可以运行 sudo docker images 看一下当前镜像列表

在docker中搭建一个nginx服务,并启动

sudo docker run -i -t centos:6.7 /bin/bash #启动并进入容器
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
yum install nginx
chkconfig nginx on
exit
#安装Nginx并修改web目录为/www, 设置nginx为开机启动

docker ps -l #查看上一次操作过的镜像ID
docker commit fdef67e9f5c2 nginx:v1  #提交并生成一个新的镜像
docker run -d -p 80:80 -v /web:/www nginx:v1 /sbin/init
#-d是以Daemon模式运行。
#-p 80:80 是将本地80端口映射到容器的80端口,现在可以在本地使用http://localhost访问。
#-v /web:/www 是将本地的/web目录挂载到容器的/www(容器配置的web目录)目录下。
#nginx:v1 是要运行的镜像名称。
#/sbin/init 是容器运行后的系统初始化操作,主要用于启动nginx,php-fpm,mysql服务。

进入已经启动了的容器 'docker ps'

docker ps
#运行此条命令,查看当前机器中运行的容器

root@rich-VirtualBox:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                NAMES
1fb462e5028a        nginx:v1            "/sbin/init"        4 seconds ago       Up 3 seconds        0.0.0.0:80->80/tcp   pensive_hopper

可以看到当前有一个名字为nginx:v1镜像, ID为1fb462e5028a的容器正在运行, 接下来让我们进入这个正在运行中的容器

sudo docker exec -i -t 1fb462e5028a /bin/bash
使用exec命令可以进入正在运行中的容器

搜索线上镜像

使用docker search命令可以搜索docker官方库的镜像.

上面做的例子都是以centos的镜像为基础,那么如何安装其镜像呢?</br>
首先我们需要搜索镜像,知道镜像的名字,才可以使用docker pull将镜像下载到本地

sudo docker search mysql
NAME                       DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                      MySQL is a widely used, open-source relati...   2643      [OK]
mysql/mysql-server         Optimized MySQL Server Docker images. Crea...   167                  [OK]
centurylink/mysql          Image containing mysql. Optimized to be li...   46                   [OK]
sameersbn/mysql                                                            36                   [OK]
google/mysql               MySQL server for Google Compute Engine          16                   [OK]
appcontainers/mysql        Centos/Debian Based Customizable MySQL Con...   8                    [OK]
marvambass/mysql           MySQL Server based on Ubuntu 14.04              6                    [OK]
drupaldocker/mysql         MySQL for Drupal                                2                    [OK]
yfix/mysql                 Yfix docker built mysql                         2                    [OK]
azukiapp/mysql             Docker image to run MySQL by Azuki - http:...   2                    [OK]
alterway/mysql             Docker Mysql                                    2                    [OK]
debezium/example-mysql     Example MySQL database server with a simpl...   1                    [OK]
andreluiznsilva/mysql      A extension of the offical MySQL container...   1                    [OK]
phpmentors/mysql           MySQL server image                              1                    [OK]
sin30/mysql                MySQL images with my own config files.          1                    [OK]
tetraweb/mysql                                                             1                    [OK]
projectomakase/mysql       Docker image for MySQL                          0                    [OK]
lancehudson/docker-mysql   MySQL is a widely used, open-source relati...   0                    [OK]
cloudposse/mysql           Improved `mysql` service with support for ...   0                    [OK]
livingobjects/mysql        MySQL                                           0                    [OK]
tozd/mysql                 MySQL (MariaDB fork) Docker image.              0                    [OK]
dockerizedrupal/mysql      docker-mysql                                    0                    [OK]
nanobox/mysql              MySQL service for nanobox.io                    0                    [OK]
vukor/mysql                Build for MySQL. Project available on http...   0                    [OK]
duruo850/mysql             mysql docker                                    0                    [OK]

在可以选择一个镜像进行 docker pull