Docker Basic
来源:互联网 发布:js判断ie版本是否大于7 编辑:程序博客网 时间:2024/05/17 22:05
Docker近几年很火,俨然在云计算中已占有重要一席,且极大方便了开发运维,相比笨重的虚拟机( Docker VS 虚拟机),其轻巧敏捷且跨平台的流畅体验的确让人为之一振,以前也一直想通过Vagrant来统一管理开发环境,不过Vagrant本质上还是基于虚拟机,且坑较多,从各方面来看跟Docker不在一个重量级上。
同时Docker镜像的管理采纳了Git的理念,使用起来也得心应手。
也正因为Docker的关注度之高,其技术迭代太快,很多博客上内容都已经过时,更不用说出版的书籍了,平时学习还是要多看官方文档,不熟悉的指令多看帮助。
基础
slogan:
核心技术:
- 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/
常见问题
Cannot connect to the Docker daemon. Is the docker daemon running on this host
解决:查看docker服务是否开启,若已开启,则为权限问题Failed to get D-Bus connection: Operation not permitted
解决:有时在CentOS容器中使用service指令会报改错,运行如下指令即可:docker run --privileged -ti --name test centos:upgrade /usr/sbin/init
运行如下指令:
$ docker run -it --privileged --name centos_test -p 2200:22 centos:upgrade2 /usr/sbin/init /bin/bash
,并没有进入交互模式,必须在新的命令行窗口执行exec才行。
解决:以前一直用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
- Docker Basic
- docker basic guide
- @Basic
- Basic
- Basic
- BASIC
- @Basic
- @Basic
- basic
- docker
- docker
- docker
- docker
- Docker
- Docker
- docker
- Docker
- Docker
- SVN使用
- 数据倾斜解决方案之三:使用随机Key实现双重聚合
- 关于烙饼排序问题的算法与Java实现
- jsp中c标签的使用
- Git 学习笔记
- Docker Basic
- 7.12
- 手机综合征
- Java Map 按Key排序和按Value排序
- 【PHP】单词十以内的加法de多种解法
- 进程与线程的区别
- MyBatis环境搭建入门
- 详谈java内存模型
- MySQL相关的建表语句