Docker Basic

来源:互联网 发布:js判断ie版本是否大于7 编辑:程序博客网 时间:2024/05/17 22:05

Docker近几年很火,俨然在云计算中已占有重要一席,且极大方便了开发运维,相比笨重的虚拟机( Docker VS 虚拟机),其轻巧敏捷且跨平台的流畅体验的确让人为之一振,以前也一直想通过Vagrant来统一管理开发环境,不过Vagrant本质上还是基于虚拟机,且坑较多,从各方面来看跟Docker不在一个重量级上。
同时Docker镜像的管理采纳了Git的理念,使用起来也得心应手。
也正因为Docker的关注度之高,其技术迭代太快,很多博客上内容都已经过时,更不用说出版的书籍了,平时学习还是要多看官方文档,不熟悉的指令多看帮助。

基础

slogan:

Build,Ship and Run Any App,Anywhere!

核心技术:

  • namespace:访问隔离
  • cgroup:资源控制

核心基本概念:

  • 镜像:只读的模板,可从hub下载,也可从自修改的容器生成。
  • 容器:从镜像运行的实例,在镜像上加一可写层。
  • 仓库:镜像仓库,Docker Hub类似Git Hub。

安装及初始配置

Windows安装需求

Docker for Windows需运行在win10的HyperV上,查看win10是否支持Hyper-V(一般都会支持),cmd中输入systeminfo Hyper-V一栏必须都为Yes才行,以下是实验室老爷机的输出,不符合条件啊。

Hyper-V Requirements:      VM Monitor Mode Extensions: Yes                           Virtualization Enabled In Firmware: Yes                           Second Level Address Translation: No                           Data Execution Prevention Available: Yes

若符合条件官网下载msi文件安装即可,否则可使用toolbox的替代方案。
值得一提的是Docker为Windows和Linux提供了相似的体验,也算是Docker践行其“Anywhere”理念。Docker for Windows提供了对Linux容器和Windows容器的支持。但值得注意的是:这两种容器模式不能被Docker Engine同时启用,但可以手工切换,通过docker version可以看到当下docker所处的模式。

CentOS安装

本来Docker技术就是基于LXC,与Linux的融合自然是浑然天成,我是在CentOS7上安装,按照如下官方文档一步步执行即可:
https://docs.docker.com/engine/installation/linux/docker-ce/centos/#install-using-the-repository

安装与基础配置命令

  • 安装
sudo yum install dockerdocker -v/--version            docker versiondocker info                 #可查看系统、镜像等各种信息service docker start        #CentOS下开启Docker服务
  • 镜像相关指令
docker search hello-world   #镜像检索docker pull hello-world     #镜像下载docker images               #镜像列表docker inspect <image|container> #查看image或container的底层信息docker rmi hello-world      #删除镜像docker commit -m "add root pwd" ef4c6104b9ed centos:upgrade2 #将修改后的容器打包为新的镜像,类似git提交变更
  • 容器相关指令
docker run --name mynginx -d nginx  #后台启动,并将容器命名为mynginxdocker run -p 80:80 -v /data:/data -d nginx  #后台启动,将容器的80端口映射到主机的80端口,主机的目录/data映射到容器的/data目录#Docker Volume本质上是容器与主机之间共享的目录或者文件,#这样Docker Volume中的数据可以在主机和容器中实时同步。#使用VMware时配置共享目录与Docker Volume非常相似。docker run -it nginx:latest /bin/bash      #以交互模式启动,并在容器内执行/bin/bash命令docker exec -it centos:upgrade /bin/bash  #容器若后台运行,该指令可连接容器docker stop centos                        #停止容器docker start centos                       #启动已停止的容器docker ps -q -a | xargs docker rm         #windows下批量删除容器docker rm `docker ps -a -q`#我的几个容器的启动指令#CentOS容器,最小化安装版docker run -it --privileged --name centos -p 2200:22 centos:upgrade2 /usr/sbin/init  /bin/bash#sequenceiq/hadoopdocker run -it --name hadoopQuick -p 2202:2122 hadoop:0.1  /etc/bootstrap.sh -bash

除直接在cmd输入指令,还可以使用Kitematic图形化客户端,方便快捷!

编写Dockerfile自定义一个镜像

只要熟悉Linux常用指令,注意一些dockerfile中特殊的地方,自定义一个镜像还是挺方便的,我这里主要更改了别人的镜像,方便搭建自己的hadoop集群。
期间遇到一个问题,RUN后面将/usr/local目录下的压缩包解压,但是该目录下并没有解压后的文件,在编译Docker镜像的过程中会打印执行的Linux指令执行过程,解压完cd了一下发现当前目录是/root,也就是说/usr/local下的压缩包被解压到/root目录下了,原因是WORKDIR设置的目录是/root,这里RUN后的命令并不想我们平时执行在当前目录下,因为此时的当前目录是WORKDIR设置的。
后来通过Dockerfile重新构建镜像时又报错:W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/main/binary-amd64/Packages Hash Sum mismatch
查资料发现由于源的问题,更换几个源也没解决,回头搭建VPN试试。
还有Message from syslogd@server-centos at Oct 8 20:54:30 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1

据说是docker多年的沉疴痼疾了,暂时无解,好在不怎么影响使用,只是看着不爽。

参考:https://kiwenlau.com/2016/06/12/160612-hadoop-cluster-docker-update/

常见问题

  1. Cannot connect to the Docker daemon. Is the docker daemon running on this host
    解决:查看docker服务是否开启,若已开启,则为权限问题
  2. Failed to get D-Bus connection: Operation not permitted
    解决:有时在CentOS容器中使用service指令会报改错,运行如下指令即可:
    docker run --privileged -ti --name test centos:upgrade /usr/sbin/init
  3. 运行如下指令:$ docker run -it --privileged --name centos_test -p 2200:22 centos:upgrade2 /usr/sbin/init /bin/bash,并没有进入交互模式,必须在新的命令行窗口执行exec才行。
    解决:

  4. 以前一直用VMware,一时没法完全切过来但是Docker与VMware没法共存,择一启动。

$  bcdedit /copy {current} /d "Windows10 without  Hyper-V"The entry was successfully copied to {db9aac96-d405-11e4-8257-68f728acfa38}.$ bcdedit /set {db9aac96-d405-11e4-8257-68f728acfa38} hypervisorlaunchtype OFFThe operation completed successfully.

参考链接

https://yq.aliyun.com/articles/62375

原创粉丝点击