深入浅出Docker技术-熟悉Docker基本命令

Docker 介绍:

      Docker 简单的来说就是可以想象成集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。

     Docker 就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。

Docker 组件介绍:

    Image(镜像): 类似于虚拟机,作用和虚拟机是一样的,唯独是组成部分会有些区别。简单的说如果我们想启动一个容器就必须要有镜像。

     Container(容器): docker是通过容器来运行业务的,就像运行一个kvm虚拟机是一样的。容器其实就是从镜像创建的一个实例。我们可以对容器进行增删改查,容器之间也是相互隔离的。和虚拟机最大的区别就是一个是虚拟的一个是隔离的。 缺点:不会像虚拟机那样隔离的那么彻底,我们可以将容器理解为简化版的linux,有进程运行在里面。

      Repository(仓库): 根据docker的三大理念构建 运输 运行,我们就需要一个仓库来存放镜像 。简单的说:我们将镜像创建完成就需要存放到仓库里面,进行集中式的管理。仓库这点类似于github,docker也有一个dockerhub,他也是一个公共对外的仓库。

Docker  Centos 安装:

   Docker  安装大同小异, 本系列以Centos 7 为基础环境;

 前提条件

     目前,CentOS 仅发行版本中的内核支持 Docker。

     Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。

     Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。

[root@runoob ~]# uname -r    查看系统内核

    # 安装依赖包

    yum install -y yum-utils device-mapper-persistent-data lvm2

    # 添加Docker软件包源–aliyun

    sudo yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

     # 上述命令,有些机器并不能成功,可以cat /etc/yum.repos.d/docker.repo 看一下这个配置文件有没有写入,如果没有可以手动下载添加进去;


    yum makecache fast

    # 安装Docker CE

    yum install docker-ce

    # 启动

    systemctl start docker

    # 查看版本,验证是否安装成功

     docker –version

    配置国内镜像源,便于下载镜像文件

    vi /etc/docker/daemon.json

    {

    "registry-mirrors": [ "https://registry.docker-cn.com"]

    }

    # 卸载

    yum remove docker-ce

    rm -rf /var/lib/docker

    查看docker 版本信息

      [root@runoob ~]# docker version

   验证 docker 是否安装成功并在容器中执行一个测试的镜像。

      [root@runoob ~]#  docker run hello-world

   到此,docker CentOS 系统的安装完成。

  安装镜像过程中需要的问题:

   docker下拉镜像报error pulling image configuration错误

   解决方式:国内访问直接访问docker hub网速比较慢原因;

   在Docker  /etc/docker/daemon.json 加上一下信息; 更改后重启docker;

   {

     "registry-mirrors": ["http://ef017c13.m.daocloud.io"],

      "live-restore": true

     }

CentOS Docker 镜像管理命令:

 获取一个新的镜像

  当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

    [root@runoob ~]#  docker pull centos
列出镜像列表

         我们可以使用 docker images 来列出本地主机上的镜像。

        runoob@runoob:~$ docker images
查找镜像

   我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

         我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

    runoob@runoob:~$  docker search httpd
删除镜像

       docker rmi : 删除本地一个或多少镜像。

     root@runoob:~# docker rmi -f runoob/ubuntu:v4
创建镜像

当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

·         1.从已经创建的容器中更新镜像,并且提交这个镜像

·         2.使用 Dockerfile 指令来创建一个新的镜像

·         3 基于本地模版导入;

基于已有的创建:

 docker commit :从容器创建一个新的镜像;

 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS说明:

         -a :提交的镜像作者;

       -c :使用Dockerfile指令来创建镜像;

        -m :提交时的说明文字;

       -p :在commit时,将容器暂停。

将容器9a3a83b7f81b 保存为新的镜像,并添加提交人信息和说明信息。

[root@localhost ~]# docker commit -a "tony" -m "my tony nginx " 9a3a83b7f81b  tony:nginx

sha256:1d7572e36eed10c97ec645c3d48770ddbd40e01ec89f39a7568f2ca3ec10aacc

使用 Dockerfile 指令来创建一个新的镜像:

  此方式略过…….

 

镜像标签:

  我们可以使用 docker tag 命令,为镜像添加一个新的标签。

runoob@runoob:~$ docker tag 860c279d2fec runoob/centos:dev

    docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。

    使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签。

 

存出和载入镜像:

     docker save : 将指定镜像保存成本地文件。

  将镜像runoob/ubuntu:v3 生成mynginx.tar文档

 runoob@runoob:~$ docker save -o mynginx.tar runoob/ubuntu:v3

      docker save docker.io/hello-world>/root/ubuntu.tar 导入到固定文件;

 载入导出的镜像文件;

 docker load < ubuntu.tar
发布镜像:

   docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库

   docker push [OPTIONS] NAME[:TAG]

OPTIONS说明:

·         –disable-content-trust :忽略镜像的校验,默认开启

docker push myapache:v1

CentOS Docker 容器管理命令:

Docker 创建容器:

docker create 创建一个新的容器但不启动它

    使用docker镜像nginx:latest创建一个容器,并将容器命名为myrunoob

    docker create  --name myrunoob  nginx:latest
Docker 创建并且启动容器:

 docker run 创建一个新的容器并运行一个命令

    使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx

   docker run --name mynginx -d nginx:latest

    使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。

   docker run -P -d nginx:latest

    使用镜像nginx:latest以后台模式启动一个容器,将容器的80端口映射到主机的80端口,主机的目录/data映射到容器的/data

    docker run -p 80:80 -v /data:/data -d nginx:latest

    使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

    runoob@runoob:~$ docker run -it nginx:latest /bin/bash

Dcker进入容器:

Docker attach 命令 ;

    Docker attach ;要attach上去的容器必须正在运行 ,但是这种方式 CTRL-C不仅会导致退出容器,而且还stop了;detach的意思按理应该是脱离容器终端,但容器依然运行。

          好在attach是可以带上–sig-proxy=false来确保CTRL-D或CTRL-C不会关闭容器。

不推荐上述命令;

        docker attach --sig-proxy=false mynginx
Docker  exec 命令:
    docker exec -i -t  mynginx /bin/bash
或者
    docker exec -ti 5fd98ead0f32 /bin/bash

nsenter 命令:

 推荐使用:

         在使用nsenter命令之前需要获取到docker容器的进程,然后再使用nsenter工具进去到docker容器中,具体的使用方法如下:

docker inspect : 获取容器/镜像的元数据。

docker inspect –format "{{.State.Pid}}" mydocker; 获取容器Pid; 类似与获取元数据

的json数据信息;

docker inspect –format "{{.State.Pid}}"

nsenter –target 19521  –mount –uts –ipc –net –pid

 

Docker 删除容器:

docker rm 容器ID; 删除容器;

docker rmi -f ;强制删除容器;

 

其他命令:

docker ps : 列出容器

docker ps -a:列出所有的容器信息;

docker ps -a | grep nginx ;过滤nginx 容器信息;

docker start 容器ID; 启动一个或多少已经被停止的容器

docker stop  容器ID; 停止一个运行中的容器

docker restart :重启容器

 

导入和导出容器:

docker export :将文件系统作为一个tar归档文件导出到STDOUT。

      ida404c6c174a2的容器按日期保存为tar文件。

runoob@runoob:~$ docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2
runoob@runoob:~$ ls mysql-`date +%Y%m%d`.tar
                               mysql-20160711.tar

docker import : 从归档文件中创建镜像。

从镜像归档文件my_ubuntu_v3.tar创建镜像,命名为runoob/ubuntu:v4

docker import  my_ubuntu_v3.tar runoob/ubuntu:v4  
docker images runoob/ubuntu:v4
Docker迁移:

https://blog.csdn.net/sharetop/article/details/50977044

docker save load export import的区别:

  https://blog.csdn.net/guizaijianchic/article/details/78324646

CentOS Docker 仓库管理:

搭建私有仓库:

   https://www.cnblogs.com/Tempted/p/7768694.html

Docker 命令大全:

   http://www.runoob.com/docker/docker-command-manual.html