在这篇文章中,我们将带领您了解Docker面试题的全貌,包括一的相关情况。同时,我们还将为您介绍有关C语言面试题(一)、Docker17.03系列教程(一)DockerEE/DockerCE简介与版本
在这篇文章中,我们将带领您了解Docker 面试题的全貌,包括一的相关情况。同时,我们还将为您介绍有关C语言面试题(一)、Docker 17.03系列教程(一)Docker EE/Docker CE简介与版本规划、Docker 之 OSX+Vagrant+Docker+LNMP(一)、docker 学习系列(一)--docker-machine的知识,以帮助您更好地理解这个主题。
本文目录一览:- Docker 面试题(一)(docker面试题汇总)
- C语言面试题(一)
- Docker 17.03系列教程(一)Docker EE/Docker CE简介与版本规划
- Docker 之 OSX+Vagrant+Docker+LNMP(一)
- docker 学习系列(一)--docker-machine
Docker 面试题(一)(docker面试题汇总)
什么是 Docker?
Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。
CI(持续集成)服务器的功能是什么?
CI功能就是在每次提交之后不断地集成所有提交到存储库的代码,并编译检查错误
什么是 Docker 镜像?
Docker镜像是Docker容器的源代码,Docker镜像用于创建容器。使用build命令创建镜像
什么是 Docker 容器?
Docker容器包括应用程序及其所有依赖项,作为操作系统的独立进程运行
Docker 容器有几种状态?
Docker容器可以有四种状态:
运行
已暂停
重新启动
已退出
Docker 使用流程
1)创建Dockerfile后,您可以构建它以创建容器的镜像
2)推送或拉取镜像。
Dockerfile 中最常见的指令是什么?
Dockerfile中的一些常用指令如下:
FROM:指定基础镜像
LABEL:功能是为镜像指定标签
RUN:运行指定的命令
CMD:容器启动时要运行的命令
Dockerfile 中的命令 COPY 和 ADD 命令有什么区别?
COPY与ADD的区别COPY的<src>只能是本地文件,其他用法一致
docker 常用命令?
docker pull 拉取或者更新指定镜像
docker push 将镜像推送至远程仓库
docker rm 删除容器
docker rmi 删除镜像
docker images 列出所有镜像
docker ps 列出所有容器
DevOps 有哪些优势?
技术优势:
• 持续的软件交付
• 修复不太复杂的问题
• 更快地解决问题
商业利益:
• 更快速地传递功能
• 更稳定的操作环境
• 有更多时间可以增加价值(而不是修复/维护)
CI(持续集成)服务器的功能是什么?
CI服务器功能是不断地集成所有正在进行的更改并由不同的开发人员提交到存储库,并检查编译错误。它需要每天多次构建代码,最好是在每次提交之后,
以便它可以检测在问题发生时是哪个提交Bug了。
C语言面试题(一)
今天给大家分享一下面试Linux岗位的c语言基础题目,说不定下次你面试的时候,面试官就会这样考你哦,现在一起随着笔者的步伐,一起去看看是什么面试题目?每天进步一点点,日积月累你也是专家!
面试题目
1、int a =0x12345678;这个数值是怎样具体存入内存的,说出详细过程来?
2、 下面这个宏定义 这样写,那么宏定义有问题不,如果有问题的话,说出原理来?
#define AA (1024*1024*1024*1024)
3、在程序里面怎样使下面变量a的值一直保持20?
int a=0;
a=20;
4、怎样使下面的结构体保持一个字节对齐或者说八字节对齐?
struct Test{
int a ;
int c ;
char d;
};
总结
好了,今天主要是给大家分享一些基础的面试题,这些题目看起来是比较简单,但是基础没打好,或者说很长时间没接触过,平时的话,也没怎么注意去深入理解的话,说不定工作几年的老司机都会有可能翻车哦,哈哈!这些面试题目有的知识点,在之前的文章里面有介绍过的;欢迎大家在下面留言交流,希望能够帮到你!
本文分享自微信公众号 - TXP嵌入式(txp1121518wo-)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
Docker 17.03系列教程(一)Docker EE/Docker CE简介与版本规划
近日,Docker发布了Docker 17.03。进入Docker 17时代后,Docker分成了两个版本:Docker EE和Docker CE,即:企业版(EE)和社区版(CE)。那么这两个版本有什么区别呢?不仅如此,Docker进入17.03后,版本命名方式跟之前完全不同,以后Docker又会有怎样的版本迭代计划呢?本文将为您一一解答。
版本区别
Docker EE
Docker EE由公司支持,可在经过认证的操作系统和云提供商中使用,并可运行来自Docker Store的、经过认证的容器和插件。
Docker EE提供三个服务层次:
服务层级 | 功能 |
---|---|
Basic | 包含用于认证基础设施的Docker平台 Docker公司的支持 经过认证的、来自Docker Store的容器与插件 |
Standard | 添加高级镜像与容器管理 LDAP/AD用户集成 基于角色的访问控制(Docker Datacenter) |
Advanced | 添加Docker安全扫描 连续漏洞监控 |
大家可在该页查看各个服务层次的价目:https://www.docker.com/pricing 。
Docker CE
Docker CE是免费的Docker产品的新名称,Docker CE包含了完整的Docker平台,非常适合开发人员和运维团队构建容器APP。事实上,Docker CE 17.03,可理解为Docker 1.13.1的Bug修复版本。因此,从Docker 1.13升级到Docker CE 17.03风险相对是较小的。
大家可前往Docker的RELEASE log查看详情https://github.com/docker/docker/releases 。
Docker公司认为,Docker CE和EE版本的推出为Docker的生命周期、可维护性以及可升级性带来了巨大的改进。
版本迭代计划
Docker从17.03开始,转向基于时间的YY.MM
形式的版本控制方案,类似于Canonical为Ubuntu所使用的版本控制方案。
Docker CE有两种版本:
edge版本每月发布一次,主要面向那些喜欢尝试新功能的用户。
stable版本每季度发布一次,适用于希望更加容易维护的用户(稳定版)。
edge版本只能在当前月份获得安全和错误修复。而stable版本在初始发布后四个月内接收关键错误修复和安全问题的修补程序。这样,Docker CE用户就有一个月的窗口期来切换版本到更新的版本。举个例子,Docker CE 17.03会维护到17年07月;而Docker CE 17.03的下个稳定版本是CE 17.06,这样,6-7月这个时间窗口,用户就可以用来切换版本了。
Docker EE和stable版本的版本号保持一致,每个Docker EE版本都享受为期一年的支持与维护期,在此期间接受安全与关键修正。
总结
- Docker从17.03开始分为企业版与社区版,社区版并非阉割版,而是改了个名称;企业版则提供了一些收费的高级特性。
- EE版本维护期1年;CE的stable版本三个月发布一次,维护期四个月;另外CE还有edge版,一个月发布一次。
参考文档
- https://blog.docker.com/2017/03/docker-enterprise-edition/
版权说明
本文采用 CC BY 3.0 CN协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
关注我
关注我
博客:http://www.itmuch.com
微信公众号:
Docker 之 OSX+Vagrant+Docker+LNMP(一)
目标:
浏览器直接 http://ip:port 访问 vagrant 中 docker 容器的 nginx
环境:
OSX ,
VirtualBox5.1.18 [mac 版],
vagrant 1.9 ( centos 6.9 release [升级内核:4.11],
docker image [ centos6.7+nginx 1.9.5 ] [...])
Docker 版本历史:
2013 年第一个版本至今(2017)迅速发了十几个大版了,变化也是巨大,这里主要讨论一下近期 docker 版本对应的 centos 内核。docker 1.7 是分界点,为能完全使用 docker 功能,建议基于 cento 7.* 系统部署。
1)官网 docker 1.7 centos install 文档说明如下:
2)官网 docker 1.8 centos install 文档说明如下:
3)docker 按版本号顺序更新到的最终版本到 docker1.13 后,在 2017 年的 3 月 1 号开始,版本的格式变为如下,如目前最新的就是 17.03.1-ce。同时分作 CE(社区版)和 EE (企业版)。
标识 | 说明 |
---|---|
yy.mm | 版本格式(使用基于月份的发行版本,比如:17.03 的第一版就指向 17.03.0,如果有 bug / 安全修复需要发布,那么将会指向 17.03.1) |
stable | 每季度发布 |
edge | 每个月发布 |
Vagrantfile 端口映射
查看 OSX 端口列表
liming-mac@local:~$ sudo lsof -i |grep LISTEN
Password:
......
VBoxHeadl 68532 linning 17u IPv4 0xd854fddc5b8ba92d 0t0 TCP localhost:ici (LISTEN)
VBoxHeadl 68532 linning 18u IPv4 0xd854fddc5b76750d 0t0 TCP *:40443 (LISTEN)
VBoxHeadl 68532 linning 19u IPv4 0xd854fddc5900971d 0t0 TCP *:4080 (LISTEN)
Linux 查看端口列表
[root@vgt-dock1 ~]# netstat -apn |grep LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 982/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1151/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1230/master
Vagrantfile 修改
# 因docker的宿主vagrant系统 由LNMP.box 生成,故80端口已被占用,故使用 1080 端口映射 container 的 nginx的80
# 增加 forwarded_port ,以便 host (:1580) <-> vagrant (:1080) ,vagrant (:1080) <-> docker (:80)
# mac浏览器访问 container 的nginx 方式:http://localhost:1580 或 http://192.168.55.5:1080
...
config.vm.define "dock1" do |dock1|
dock1.vm.hostname="vgtd-dock1"
# 设置访问vagrant的内部IP
dock1.vm.network "private_network", ip: "192.168.55.5"
# 设置 host 和 vagrant的端口映射
dock1.vm.network "forwarded_port", guest:1080, host:1580
#dock1.vm.synced_folder "dock1/default", "/home/wwwroot/default"
end
...
vagrant (centos 6.*) 安装 docker
[vagrant@vgtd-dock1 ~]$ sudo su -
[root@vgtd-dock1 ~]# yum -y update
......
[vagrant@vgtd-dock1 ~]$ sudo yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
......
[vagrant@vgtd-dock1 ~]$ sudo yum -y install docker-io
......
[vagrant@vgtd-dock1 ~]$ which docker
/usr/bin/docker
[vagrant@vgtd-dock1 ~]$ ps -ef |grep docker
root 3807 1 0 11:24 ? 00:00:00 /sbin/dhclient -H vgtd-docker2 -1 -q -cf /etc/dhcp/dhclient-eth0.conf -lf /var/lib/dhclient/dhclient-eth0.leases -pf /var/run/dhclient-eth0.pid eth0
vagrant 4289 4205 0 11:37 pts/0 00:00:00 grep docker
[vagrant@vgtd-dock1 ~]$ sudo docker ps
Get http:///var/run/docker.sock/v1.19/containers/json: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?
[vagrant@vgtd-dock1 ~]$ sudo service docker start
Starting cgconfig service: [ OK ]
Starting docker: [ OK ]
[vagrant@vgtd-dock1 ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[vagrant@vgtd-dock1 ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@vgtd-dock1 ~]# docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d/1.7.1
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d/1.7.1
OS/Arch (server): linux/amd64
卸载 docker
# 如果docker info 没有服务器端,只有客户端,而你又需要同时有服务端,则一般是你以root用户安装了docker,故重新安装。
[vagrant@vgt-dock1 ~]$ yum list installed |grep docker
Failed to set locale, defaulting to C
docker-io.x86_64 1.7.1-2.el6 @epel
[vagrant@vgt-dock1 ~]$ sudo yum -y remove docker-io.x86_64
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror, versionlock
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package docker-io.x86_64 0:1.7.1-2.el6 will be erased
--> Finished Dependency Resolution
......
Running Transaction
Erasing : docker-io-1.7.1-2.el6.x86_64 1/1
Verifying : docker-io-1.7.1-2.el6.x86_64 1/1
Removed:
docker-io.x86_64 0:1.7.1-2.el6
Complete!
[vagrant@vgt-dock1 ~]$ which docker
/usr/bin/which: no docker in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin)
#清空容器目录
[vagrant@vgt-dock1 ~]$ sudo rm -rf /var/lib/docker/
官方 nginx image 的 container 内的一些操作
# docker官方的nginx镜像是基于debian 制作的,需使用debian命令操作。
root@07753582f4a2:/# apt-get install vim
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package vim
root@07753582f4a2:/# which vim
root@07753582f4a2:/# apt-get install wget
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package wget
root@07753582f4a2:/# apt-get update
......
Get:6 http://deb.debian.org/debian stretch/main amd64 Packages [9511 kB]
Fetched 9770 kB in 9min 42s (16.8 kB/s)
Reading package lists... Done
root@07753582f4a2:/# apt-get install vim
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libgpm2 vim-common vim-runtime xxd
Suggested packages:
gpm ctags vim-doc vim-scripts
The following NEW packages will be installed:
libgpm2 vim vim-common vim-runtime xxd
0 upgraded, 5 newly installed, 0 to remove and 2 not upgraded.
Need to get 6766 kB of archives.
After this operation, 31.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 ...
Get:2 ...
...
root@07753582f4a2:/# which vim
/usr/bin/vim
Dockerfile 文件建立基于 centos6.7 的 nginx1.9.5 镜像
[root@vgtd-dock1 ~]# pwd
/root
[root@vgtd-dock1 ~]# ll
total 1960
-rw-rw-r-- 1 vagrant vagrant 2037 May 17 12:01 Dockerfile
-rw-rw-r-- 1 vagrant vagrant 2426 May 17 11:40 nginx.conf
-rw-rw-r-- 1 vagrant vagrant 2201 May 17 14:28 run.sh
[root@vgtd-dock1 ~]# service docker restart
Stopping docker: [ OK ]
Starting docker: [ OK ]
# 根据Dockerfile文件建立镜像(Dockerfile 是镜像的描述文件,定义了如何构建 Docker 镜像。)
# docker build -t repository_name:tag ./ 当前目录下
# 其他未试的命令:
# docker build -f PATH 指定要使用的Dockerfile路径
# 使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。
# docker build github.com/creack/docker-firefox
[root@vgtd-dock1 ~]# docker build -t nginx_build:1.9.5 .
docker 运行 Dockerfile 如果文件中有错误,修正文件后再次 build 会继续从报错处运行。
如下片段,报错前的已通过命令直接 Using cache:
......
Step 6 : ADD nginx.conf /usr/local/nginx/conf/nginx.conf
---> Using cacheStep 12 : CMD nginx
---> Running in 63db03592778
---> ef50bd546c40
Removing intermediate container 63db03592778
Successfully built ef50bd546c40
# 镜像创建完后,就可以依据该镜像创建容器了
[vagrant@vgtd-dock1 ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[vagrant@vgtd-dock1 ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
nginx_build 1.9.5 ef50bd546c40 9 minutes ago 734.2 MB
# 查看中途出错后,产生的临时阶段容器
[vagrant@vgt-dock1 ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d1c5a3658a2 7f20945769f32dbf1ceddd7817c79e22a6c090e989c4ae2cce02383320fab6e0 "/bin/sh -c ''yum cle''" 2 days ago Exited (1) 2 days ago condescending_mclean
83cd793f5b2b 7f20945769f32dbf1ceddd7817c79e22a6c090e989c4ae2cce02383320fab6e0 "/bin/sh -c ''yum cle''" 2 days ago Exited (1) 2 days ago dreamy_fermi
# 清理临时容器
[vagrant@vgt-dock1 ~]$ sudo docker rm -f $(sudo docker ps -aq)
8d1c5a3658a2
83cd793f5b2b
[vagrant@vgt-dock1 ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# docker宿主vagrant的80端口已经给nginx了,故冲突,换端口号。同时挂载宿主机上 default目录到docker机器
[vagrant@vgtd-dock1 ~]$ sudo docker run -dti --name=nginx_build -p 80:80 -p 443:443 -v /home/wwwroot/default:/home/wwwroot nginx_build:1.9.5
fb7447ca5ec9f3e9700da06d56aebf633cf637700736343ea0d2f6955480a682
Error response from daemon: Cannot start container fb7447ca5ec9f3e9700da06d56aebf633cf637700736343ea0d2f6955480a682: Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use
[vagrant@vgtd-dock1 ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[vagrant@vgtd-dock1 ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb7447ca5ec9 nginx_build:1.9.5 "/run.sh nginx" 28 seconds ago nginx_build
# 首先删除错误的container
[vagrant@vgtd-dock1 ~]$ sudo docker rm -f fb7447ca5ec9
fb7447ca5ec9
[vagrant@vgtd-dock1 ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[vagrant@vgtd-dock1 ~]$ sudo docker run -dti --name=nginx_build -p 1080:80 -p 10443:443 -v /home/wwwroot:/home/wwwroot nginx_build:1.9.5
883f20b5cca8ba65afb7cc3a4a297064126c5652c96ed41da7450c5bdd3c8fa9
[vagrant@vgtd-dock1 ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
883f20b5cca8 nginx_build:1.9.5 "/run.sh nginx" 9 seconds ago Up 8 seconds 0.0.0.0:1080->80/tcp, 0.0.0.0:10443->443/tcp nginx_build
[vagrant@vgtd-dock1 ~]$ sudo docker exec -it 883f20b5cca8 /bin/bash
[root@883f20b5cca8 /]# hostname
883f20b5cca8
[root@883f20b5cca8 /]# ps -ef |grep nginx
root 1 0 0 06:49 ? 00:00:00 nginx: master process nginx -g daemon off;
www 11 1 0 06:49 ? 00:00:00 nginx: worker process
root 27 12 0 06:52 ? 00:00:00 grep nginx
(如下是制作 nginx 用到的文件,引自:Docker 之利用 Dockerfile 创建 Nginx 镜像)
Dockerfile
# Dockerfile detail
FROM hub.c.163.com/library/centos:6.7
MAINTAINER linning (408582708@qq.com)
# 运行任何被基础image支持的命令,
# 所有 RUN 后的系统命令,都会转变为 /bin/sh -c SYSTEM_COMMAND 执行
# /bin/sh -c 执行系统命令;/bin/sh *.sh 直接执行脚本
RUN yum clean all && \
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-* && \
yum install -y epel-release && \
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 && \
yum makecache && \
yum install -y pcre-devel openssl-devel zlib-devel gd-devel tar gcc wget git supervisor
RUN groupadd -r www && \
useradd -r -g www www && \
mkdir -p {/var/log/wwwlogs,/var/run/nginx,/var/lock}
RUN wget -c http://nginx.org/download/nginx-1.9.5.tar.gz && \
git clone https://github.com/cuber/ngx_http_google_filter_module.git && \
git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module.git && \
git clone https://github.com/aperezdc/ngx-fancyindex.git
RUN tar xf nginx-1.9.5.tar.gz && \
cd nginx-1.9.5 && \
./configure --prefix=/usr/local/nginx \
--user=www --group=www \
--error-log-path=/var/log/wwwlogs/error.log \
--http-log-path=/var/log/wwwlogs/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--with-pcre \
--with-ipv6 \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-http_mp4_module \
--with-http_image_filter_module \
--with-http_addition_module \
--http-client-body-temp-path=/usr/local/nginx/client/ \
--http-proxy-temp-path=/usr/local/nginx/proxy/ \
--http-fastcgi-temp-path=/usr/local/nginx/fcgi/ \
--http-uwsgi-temp-path=/usr/local/nginx/uwsgi \
--http-scgi-temp-path=/usr/local/nginx/scgi \
--add-module=../ngx_http_google_filter_module \
--add-module=../ngx_http_substitutions_filter_module \
--add-module=../ngx-fancyindex && \
make -j $(awk ''/processor/{i++}END{print i}'' /proc/cpuinfo) && make install && \
rm -rf ../{ngx_http*,ngx-fancyindex,nginx-1.9.5*}
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod +x /run.sh
VOLUME ["/home/wwwroot"]
EXPOSE 80 443
ENTRYPOINT ["/run.sh"]
CMD ["nginx"]
run.sh
(原文件使用了 /bin/sh 报错,修改 /bin/bash 成功)
sh 与 bash 区别
sh 一般设成 bash 的软链 (symlink)
ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Sep 14 04:45 /bin/sh -> dash在一般的 linux 系统当中(例外如 FreeBSD,OpenBSD 等),使用 sh 调用执行脚本相当于打开了 bash 的 POSIX 标准模式,也就是说 /bin/sh 相当于 /bin/bash --posix
所以,它们之间的各种差异都是来自 POSIX 标准模式 和 bash 的差异,比如用:截取字符串,不能用 let , 遇错中断 等等,在使用时需要注意。
#!/bin/bash
#########################################################################
# File Name: run.sh
#########################################################################
PATH=/bin:/usr/local/nginx/sbin:$PATH
Nginx_Install_Dir=/usr/local/nginx
set -e
if [ -n "$TIMEZONE" ]; then
rm -rf /etc/localtime && \
ln -s /usr/share/zoneinfo/$TIMEZONE /etc/localtime
fi
if [ "${1:0:1}" = ''-'' ]; then
set -- nginx "$@"
fi
if [ -z "$DATA_DIR" ]; then
DATA_DIR=/home/wwwroot
fi
sed -i "s@/home/wwwroot@$DATA_DIR@" $Nginx_Install_Dir/conf/nginx.conf
mkdir -p ${DATA_DIR}
[ ! -f "$DATA_DIR/index.html" ] && echo ''<p>
<h1>
<span><span>Hello world! This Nginx!</span><br />
</span><span>Welcome to use Docker!</span>
</h1>
<h1>
<span>^_^HAPPY </span>
</h1>
</p>
<p>
<br />
</p>
'' > $DATA_DIR/index.html
chown -R www.www $DATA_DIR
CPU_num=$(awk ''/processor/{i++}END{print i}'' /proc/cpuinfo)
if [ "$CPU_num" == ''2'' ];then
sed -i ''s@^worker_processes.*@worker_processes 2;\nworker_cpu_affinity 10 01;@'' $Nginx_Install_Dir/conf/nginx.conf
elif [ "$CPU_num" == ''3'' ];then
sed -i ''s@^worker_processes.*@worker_processes 3;\nworker_cpu_affinity 100 010 001;@'' $Nginx_Install_Dir/conf/nginx.conf
elif [ "$CPU_num" == ''4'' ];then
sed -i ''s@^worker_processes.*@worker_processes 4;\nworker_cpu_affinity 1000 0100 0010 0001;@'' $Nginx_Install_Dir/conf/nginx.conf
elif [ "$CPU_num" == ''6'' ];then
sed -i ''s@^worker_processes.*@worker_processes 6;\nworker_cpu_affinity 100000 010000 001000 000100 000010 000001;@'' $Nginx_Install_Dir/conf/nginx.conf
elif [ "$CPU_num" == ''8'' ];then
sed -i ''s@^worker_processes.*@worker_processes 8;\nworker_cpu_affinity 10000000 01000000 00100000 00010000 00001000 00000100 00000010 00000001;@'' $Nginx_Install_Dir/conf/nginx.conf
else
echo Google worker_cpu_affinity
fi
exec "$@" -g "daemon off;"
nginx.conf
user www www;
worker_processes auto;
error_log /var/log/wwwlogs/error_nginx.log crit;
pid /var/run/nginx.pid;
worker_rlimit_nofile 51200;
events {
use epoll;
worker_connections 51200;
}
http {
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
sendfile on;
tcp_nopush on;
keepalive_timeout 120;
server_tokens off;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#Gzip Compression
gzip on;
gzip_buffers 16 8k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_types
text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
text/javascript application/javascript application/x-javascript
text/x-json application/json application/x-web-app-manifest+json
text/css text/plain text/x-component
font/opentype application/x-font-ttf application/vnd.ms-fontobject
image/x-icon;
gzip_disable "msie6";
#If you have a lot of static files to serve through Nginx then caching of the files'' metadata (not the actual files'' contents) can save some latency.
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
server {
listen 80;
server_name -;
root /home/wwwroot;
index index.html index.php index.jsp;
access_log /var/log/wwwlogs/access_nginx.log combined;
location /status {
stub_status on;
auth_basic "WebServer Status";
}
# location ~ .*\.(php|php5)?$ {
# #fastcgi_pass remote_php_ip:9000;
# fastcgi_pass unix:/dev/shm/php-cgi.sock;
# fastcgi_index index.php;
# include fastcgi.conf;
# }
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
expires 30d;
}
location ~ .*\.(js|css)?$ {
expires 7d;
}
}
##########################vhost#####################################
include vhost/*.conf;
}
遇到的问题:
一、构建了多个镜像,如何清理?
vagrant@vgtd-dock1 ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> c9b509d1da27 20 minutes ago 719.4 MB
<none> <none> 77aa139efe01 43 minutes ago 625.2 MB
[vagrant@vgtd-dock1 ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bdbb86539227 c9b509d1da274c655944744ea16628058602e744e242bbbc1e4b0084ee8ae05a "/bin/sh -c ''groupad''" 15 minutes ago Exited (0) 52 seconds ago dreamy_mclean
a0c1261e9efd 77aa139efe0161a58105fe2f98ef998175fa97ad1973ea99f83ef98bf9b41fac "/bin/sh -c ''cd /tmp''" 37 minutes ago Exited (1) 33 minutes ago serene_thompson
#以上都是冗余的镜像,无法正常使用,所以准备删除,步骤:停止container, 删除对应的 image
[vagrant@vgtd-dock1 ~]$ sudo docker stop a0c1261e9efd
a0c1261e9efd
[vagrant@vgtd-dock1 ~]$ sudo docker rmi -f 77aa139efe01
二、如何排除构建镜像时候的错误?
# build Dockerfile文件无法完整运行,可先进行中断,查看是否生成images 及 container,启动试下看看报错信息
# 如下启动报错,提示没有 /bin/sh 辣么就用 /bin/bash 修改后成功。
[vagrant@vgtd-dock1 ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4addaa1fa9a3 7aa79adf640217442a73bfcde5d9283b8ac6bdeb52e91af94146a12267fea816 "/bin/sh -c ''chmod + ''" 11 minutes ago evil_mclean
[vagrant@vgtd-dock1 ~]$ sudo docker exec -it 4addaa1fa9a3 /bin/bash
Error response from daemon: Container 4addaa1fa9a3 is not running
[vagrant@vgtd-dock1 ~]$ sudo docker start 4addaa1fa9a3
Error response from daemon: Cannot start container 4addaa1fa9a3: [8] System error: exec: "/bin/sh": stat /bin/sh: no such file or directory
Error: failed to start containers: [4addaa1fa9a3]
三、Dockerfile 运行中断,无法找到错误,删除所有 container 和 images 后重新 build 报如下错误:
Setting up Install Process
Determining fastest mirrors
Error: Cannot find a valid baseurl for repo: base
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os&infra=stock error was
14: PYCURL ERROR 6 - "Couldn''t resolve host ''mirrorlist.centos.org''"
The command ''/bin/sh -c yum clean all && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-* && yum install -y epel-release && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 && yum makecache && yum install -y pcre-devel openssl-devel zlib-devel gd-devel tar gcc wget git supervisor'' returned a non-zero code: 1又或者遇到如下错误:
--2017-05-19 04:46:02-- http://nginx.org/download/nginx-1.9.5.tar.gz
Resolving nginx.org...
failed: Temporary failure in name resolution.
wget: unable to resolve host address `nginx.org''
解决方法:重启 docker 服务,再次 build
# 如果光start docker service 不行,可以试试停止 iptables
[root@vgt-dock1 ~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter nat [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@vgt-dev2 ~]# service iptables status
iptables: Firewall is not running.
[root@vgt-dock1 ~]# service docker restart
Stopping docker: [ OK ]
Starting docker: [ OK ]
四、vagrant 挂载共享目录报错:
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:
mount -t vboxsf -o uid=500,gid=500 vagrant /vagrant
The error output from the command was:
/sbin/mount.vboxsf: mounting failed with the error: No such device
解决方法:更新 VBoxGuestAdditions 到 VBoxGuestAdditions-5.1.18 版本。
步骤:
1. 下载 VBoxGuestAdditions-5.1.18.iso
2. 在 mac 主机 virtualbox 控制面板添加 “虚拟光驱”,添加 iso 文件
3.
#(1) 显示 cdrom
[root@vgt-dock1 ~]# ll /dev/cdrom*
lrwxrwxrwx 1 root root 3 May 19 15:42 /dev/cdrom2 -> sr0
#(2) cdrom 挂载到 /mnt
[root@vgt-dock1 ~]# mount -t auto /dev/cdrom2 /mnt
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@vgt-dock1 ~]# ll /mnt/
total 51363
dr-xr-xr-x 2 root root 2048 Mar 15 15:40 32Bit
dr-xr-xr-x 2 root root 2048 Mar 15 15:40 64Bit
-r-xr-xr-x 1 root root 647 Aug 16 2016 AUTORUN.INF
-r-xr-xr-x 1 root root 6381 Mar 15 15:31 autorun.sh
dr-xr-xr-x 2 root root 2048 Mar 15 15:40 cert
dr-xr-xr-x 2 root root 4096 Mar 15 15:40 OS2
-r-xr-xr-x 1 root root 4824 Mar 15 15:31 runasroot.sh
-r-xr-xr-x 1 root root 8119757 Mar 15 15:32 VBoxLinuxAdditions.run
-r-xr-xr-x 1 root root 17757696 Mar 15 15:33 VBoxSolarisAdditions.pkg
-r-xr-xr-x 1 root root 16391832 Mar 15 15:40 VBoxWindowsAdditions-amd64.exe
-r-xr-xr-x 1 root root 268496 Mar 15 15:31 VBoxWindowsAdditions.exe
-r-xr-xr-x 1 root root 10033344 Mar 15 15:33 VBoxWindowsAdditions-x86.exe
#(3)
[root@vgt-dock1 ~]# cd /mnt/
#(4) 运行报错 Failed,check the log file
[root@vgt-dock1 mnt]# sh ./VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.1.18 Guest Additions for Linux...........
VirtualBox Guest Additions installer
Removing installed version 4.3.6 of VirtualBox Guest Additions...
Copying additional installer modules ...
Installing additional modules ...
vboxadd.sh: Building Guest Additions kernel modules.
Failed to set up service vboxadd, please check the log file
/var/log/VBoxGuestAdditions.log for details.
[root@vgt-dock1 mnt]# tail -f /var/log/VBoxGuestAdditions.log
vboxadd.sh: failed: Look at /var/log/vboxadd-install.log to find out what went wrong.
vboxadd.sh: failed: Please check that you have gcc, make, the header files for your Linux kernel and possibly perl installed..
chcon: can''t apply partial context to unlabeled file `/usr/lib64/VBoxGuestAdditions/mount.vboxsf''
[root@vgt-dock1 mnt]# which gcc
/usr/bin/which: no gcc in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
[root@vgt-dock1 mnt]# yum -y install gcc make perl
....
#再次运行安装,成功
[root@vgt-docker1 mnt]# sh ./VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.1.18 Guest Additions for Linux...........
VirtualBox Guest Additions installer
Removing installed version 5.1.18 of VirtualBox Guest Additions...
vboxadd.sh: Stopping VirtualBox Additions.
Copying additional installer modules ...
Installing additional modules ...
vboxadd.sh: Building Guest Additions kernel modules.
vboxadd.sh: Starting the VirtualBox Guest Additions.
Could not find the X.Org or XFree86 Window System, skipping.
# centos 系统,可忽略 window system报错
[root@vgt-docker1 mnt]# tail -f /var/log/VBoxGuestAdditions.log
chcon: can''t apply partial context to unlabeled file `/usr/lib64/VBoxGuestAdditions/mount.vboxsf''
[root@vgt-docker1 mnt]# tail -10 /var/log/VBoxGuestAdditions.log
chcon: can''t apply partial context to unlabeled file `/usr/lib64/VBoxGuestAdditions/mount.vboxsf''
# exit 后 vagrant reload machine 成功完成 vm.synced_folder 共享目录的设置
#-------------------如果上述操作后仍旧报错,查看详细日志 -----
[root@vgt-centos7-docker1 mnt]# tail /var/log/VBoxGuestAdditions.log
vboxadd.sh: failed: Look at /var/log/vboxadd-install.log to find out what went wrong.
vboxadd.sh: failed: Please check that you have gcc, make, the header files for your Linux kernel and possibly perl installed..
[root@vgt-centos7-docker1 mnt]# tail /var/log/vboxadd-install.log
/tmp/vbox.0/Makefile.include.header:97: *** Error: unable to find the sources of your current Linux kernel. Specify KERN_DIR=<directory> and run Make again. Stop.
Creating user for the Guest Additions.
Creating udev rule for the Guest Additions kernel module.
# 解决方案:
[root@vgt-docker1 mnt]# yum update
......
[root@vgt-docker1 mnt]# yum install kernel-headers kernel-devel
....
# 重启系统,再次运行上面的 (1)(2)(3)(4)安装,成功
[root@vgt-docker1 mnt]# reboot
五、hub.docker.com 下载速度太慢?
Docker 加速器是什么,我需要使用吗?
使用 Docker 的时候,需要经常从官方获取镜像,但是由于显而易见的网络原因,拉取镜像的过程非常耗时,严重影响使用 Docker 的体验。因此 DaoCloud 推出了加速器工具解决这个难题,通过智能路由和缓存机制,极大提升了国内网络访问 Docker Hub 的速度,目前已经拥有了广泛的用户群体,并得到了 Docker 官方的大力推荐。如果您是在国内的网络环境使用 Docker,那么 Docker 加速器一定能帮助到您。
配置 Docker 加速器 (Linux 系统):
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://cfb55545.m.daocloud.io
该脚本可以将 –registry-mirror 加入到你的 Docker 配置文件 /etc/default/docker 中。适用于 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、openSUSE Leap 42.1,其他版本可能有细微不同。
PS: 我使用当前服务器的环境是 CentOS7, 内核是 4.9.0-1.el7.elrepo.x86_64,注册 daocloud 账号,登录每个人都会生成唯一的加速地址(如:http:// 分配的个人 ID.m.daocloud.ioCopy),此操作的结果是在 /etc/docker 生成 daemon.json 文件,内容 {“registry-mirrors”: [“http:// 分配的个人 ID.m.daocloud.io”],}
目前使用 DaoCloud 的 docker 加速器体验非常差,加速效果基本没感觉,故我加入了 163 的 docker 镜像,体验杠杠滴,稳定!
最终 /etc/docker/daemon.json 内容如下:
{"registry-mirrors": ["http:// 分配的个人 ID.m.daocloud.io","http://hub-mirror.c.163.com/"]}
国内 docker 镜像仓库性能对比
Docker 加速器对 Docker 的版本有要求吗?
Docker 加速器对 Docker 的版本有要求吗?需要 Docker 1.8 或更高版本才能使用,如果您没有安装 Docker 或者版本较旧,请安装或升级。
Mirror 与 Private Registry 的区别
二者有着本质的差别。
Private Registry 是开发者或者企业自建的镜像存储库,通常用来保存企业内部的 Docker 镜像,用于内部开发流程和产品的发布、版本控制。
Mirror 是一种代理中转服务,我们提供的 Mirror 服务,直接对接 Docker Hub 的官方 Registry。Docker Hub 上有数以十万计的各类 Docker 镜像。
在使用 Private Registry 时,需要在 Docker Pull 或 Dockerfile 中直接键入 Private Registry 的地址,通常这样会导致与 Private Registry 的绑定,缺乏灵活性。
使用 Mirror 服务,只需要在 Docker 守护进程(Daemon)的配置文件中加入 Mirror 参数,即可在全局范围内透明的访问官方的 Docker Hub,避免了对 Dockerfile 镜像引用来源的修改。
六、构建好的 docker 环境,访问失败?
# 查看当前docker的宿主机 docker进程是否启动,然后再核实 iptables 是否加入了 docker 服务
[root@vgt-docker1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.17.0.1 tcp dpt:cslistener
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:https
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:http
ACCEPT tcp -- anywhere 172.17.0.4 tcp dpt:mysql
ACCEPT tcp -- anywhere 172.17.0.5 tcp dpt:https
ACCEPT tcp -- anywhere 172.17.0.5 tcp dpt:http
ACCEPT tcp -- anywhere 172.17.0.3 tcp dpt:https
ACCEPT tcp -- anywhere 172.17.0.3 tcp dpt:http
# 上面的 iptables 规则中没有包含 docker ,所以重启 docker 服务,加入iptables 规则。也可以查询永久加入 iptables
[root@vgt-docker1 ~]# service docker restart
Stopping docker: [ OK ]
Starting docker: [ OK ]
[root@vgt-docker1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.17.0.3 tcp dpt:https
ACCEPT tcp -- anywhere 172.17.0.3 tcp dpt:http
ACCEPT tcp -- anywhere 172.17.0.4 tcp dpt:https
ACCEPT tcp -- anywhere 172.17.0.4 tcp dpt:http
ACCEPT tcp -- anywhere 172.17.0.5 tcp dpt:mysql
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:https
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:http
ACCEPT tcp -- anywhere 172.17.0.1 tcp dpt:cslistener
问题七
修改无法启动的容器中的内容
我们可能会碰到这样的一个问题,在容器执行过程中,修改了容器的内容(如配置文件信息),但因为修改出了问题。导致容器关闭后,无法启动。
这事需要重新修改配置文件。 正常情况下可以通过 docker exec 命令打开容器的一个 shell 终端进去修改。
但这时容器已经无法启动了。这时该如何处理呢? 这有两种方案:
方案一:创建新镜像
把这个问题容器用 docker commit 提交到一个新的镜像,然后用 docker run -it 基于新镜像运行一个新的容器进去改变(修复)配置文件。
再通过新的容器再提交一个新的镜像,然后在基于新的镜像重新启动容器(同最初的容器)。
这个方法是可行的,但问题是步骤多,而且提交了新的镜像,对于后续维护增加了复杂性。
方案二:直接修改容器的文件
所有的容器数据都存在 /var/lib/docker/aufs/diff/ 路径下。比如:
root@ubuntu:~# ls /var/lib/docker/aufs/diff/ -l total 176 drwxr-xr-x 2 root root 4096 Mar 6 05:13 040bf8e0842564e26e62f3e3a30785bd9651c82c52ed99115cd5360ce979e680 drwxr-xr-x 6 root root 4096 Mar 6 05:13 04f7e78a2c8ac9664503f4ea5a1d94bf27b94620987f241cfb9fd6631f761113 drwxr-xr-x 2 root root 4096 Mar 11 01:07 0c666375883f81ba0fc3962368766e93710f59c072a4b80cdf5640323018ccdb drwxr-xr-x 4 root root 4096 Mar 11 07:53 0d7fc1722e459b242140ec45faec754d4967d72ea2ddf321f8606c837f8e8d4f drwxr-xr-x 6 root root 4096 Mar 11 07:53 0d7fc1722e459b242140ec45faec754d4967d72ea2ddf321f8606c837f8e8d4f-init drwxr-xr-x 3 root root 4096 Mar 6 05:13 0dc5e226a795507723362cc16046cf16650f8f70dc7bb721b799a5f2a40512ce drwxr-xr-x 2 root root 4096 Mar 6 05:13 0fd3b6e125673affc1f348cdb0c071782bde7d7ab4748bea3e30bc2d1d7ea7ab ......................一个容器的数据对应这其中的一个或多个目录 。其中目录名的前几位就是容器的 ID,通过这知道容器和目录的对应关系。
注意这个目录需要用 root 用户执行。具体的操作步骤如下:
1、cd 到当前目录 cd /var/lib/docker/aufs/diff/
注:overlay 存储模式与 aufs 模式类似,容器的数据目录为:/var/lib/docker/overlay,后续操作一致。
2、查找要修改的配置文件所在容器中的位置
find ./ -name ''nginx.conf''
假设我们要修改的是 nginx.conf 文件,可能的结果如:
./eb531927ba243b59f0db78848809423f7debe148a9ef972088ea41be73c2aa81/etc/nginx/nginx.conf
./4975acfb30f3f729ac08a9c1bd642f735298a47057fc7c414c7479696b80f36a/etc/nginx/nginx.conf
./6fce3cb01e3c9b8cc4e1fc270c012b1d0b666fe49ad8b6bededb99e295c5da4c/etc/nginx/nginx.conf这时我们通过比较要修改容器的 ID 与上面几个目录的前缀,就知道是要修改哪个配置文件了。
如果我们进入类似 4975acfb30f3f729ac08a9c1bd642f735298a47057fc7c414c7479696b80f36a 目录,会发现这个目录下的内容和 linux 跟目录下的目录结构非常类似。我们可以找到相关的配置文件直接修改。
说明:因为一个容器的文件系统包括不可修改的镜像层和可修改的读写层,这个目录下其实就是读写层的内容。
3、修改完毕后用 docker start 容器名 / ID 即可重新启动容器。
其他
# 批量删除 container
docker rm $(docker ps -aq)
# 批量删除 images
docker rmi $(docker images -q)
docker 学习系列(一)--docker-machine
先讲解一下如何创建一个machine
1. 打开命令行
2. 使用 docker-machine ls
命令,默认情况下如下
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
3. 创建一个machine
- 如果你使用mac,不支持Hyper-V的windows上使用toolbox或者是docker for mac 需要使用virtualbox作为驱动。
- 如果使用docker for windows可以使用如下方式创建
选择一个machine之后,选择虚拟机交换管理器
之后创建外部网络
点击确定
这样就可以创建machine了
docker-machine create -d hyperv --hyperv-virtual-switch "<NameOfVirtualSwitch>" <nameOfNode>
下面是示例:
```shell
PS C:\WINDOWS\system32> docker-machine create -d hyperv --hyperv-virtual-switch "Primary Virtual Switch" default
Running pre-create checks...
Creating machine...
(manager1) Copying C:\Users\Vicky\.docker\machine\cache\boot2docker.iso to C:\Users\Vicky\.docker\machine\machines\manag
er1\boot2docker.iso...
(manager1) Creating SSH key...
(manager1) Creating VM...
(manager1) Using switch "Primary Virtual Switch"
(manager1) Creating VHD
(manager1) Starting VM...
(manager1) Waiting for host to start...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: C:\Program Files\Doc
ker\Docker\Resources\bin\docker-machine.exe env manager1
PS C:\WINDOWS\system32>
```
但是笔者电脑出现了一个
Error creating machine: Error in driver during machine creation: exit status 1
经过几次尝试怀疑为内存不足,通过更改最小启动内存解决问题。
C:\WINDOWS\system32>docker-machine create -d hyperv --hyperv-virtual-switch "primary Virtual switch" default
Running pre-create checks...
(default) Image cache directory does not exist, creating it at C:\Users\LiangWentao\.docker\machine\cache...
(default) No default Boot2Docker ISO found locally, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v1.12.3
(default) Downloading C:\Users\LiangWentao\.docker\machine\cache\boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v1.12.3/boot2docker.iso...
(default) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
Creating machine...
(default) Copying C:\Users\LiangWentao\.docker\machine\cache\boot2docker.iso to C:\Users\LiangWentao\.docker\machine\machines\default\boot2docker.iso...
(default) Creating SSH key...
(default) Creating VM...
(default) Using switch "primary Virtual switch"
(default) Creating VHD
(default) Starting VM...
Error creating machine: Error in driver during machine creation: exit status 1
今天关于Docker 面试题和一的分享就到这里,希望大家有所收获,若想了解更多关于C语言面试题(一)、Docker 17.03系列教程(一)Docker EE/Docker CE简介与版本规划、Docker 之 OSX+Vagrant+Docker+LNMP(一)、docker 学习系列(一)--docker-machine等相关知识,可以在本站进行查询。
本文标签: