返回目录:win7问题
内容导航:
一、Docker实战003:运行hello Word并解决报错
配置docker镜像加速器
docker的镜像基本都在国外的服务器上,拉取镜像时很容易因为网络不稳定导致拉取速度很慢甚至失败。这里我配置下国内的阿里云镜像加速器,可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器。登录阿里云获取专属的镜像加速器地址,daemon.json文件一般再在/etc/docker目录下,如果没有则新建即可。
拉取hello-world镜像
docker提供了hello-world示例镜像,我们可以通过docker search hello-world来查看。配置docker镜像加速器后我们来拉取一个hello-world镜像,通过命令:docker pull hello-world来拉取即可。
Docker拉取错误
这个是请求头超时异常,docker请求不到docker官网下载镜像。这个是DNS域名解析异常,我们需要配置下DNS来解决这个问题。Cenots通过安装bind-utils可以获取Dig工具, Dig是用来查询DNS包括NS记录,A记录,MX记录等相关信息的工具。这里我们通过命令:yum install bind-utils来安装bind-utils,然后通过dig来获取docker的DNS信息,在执行结果中选择一组解析放到本机的/etc/hosts文件里做映射。
如果配置了hosts映射还是无效,我们可以再配置下/etc/resolv.conf文件。/etc/resolv.conf是DNS的配置文件,用于设置DNS服务器的IP地址及DNS域名。用vim打开文件/etc/resolv.conf,新增谷歌的dns域名解析地址:nameserver 8.8.4.4。保存之后重启下docker,再试试docker pull hello-world拉取。
查看docker镜像
docker镜像是一个文件系统(它没有状态也不会被改变),镜像可以启动复杂的软件供用户使用。 通过命令:docker images或者docker image ls可以列出本机已有的镜像,REPOSITORY资源仓库名,TAG指镜像的标签信息,IMAGE ID:是镜像的 ID(唯一的),CREATED:指镜像最后的更新时间,SIZE:指镜像的大小。
测试HelloWorld
拉取完hello-world镜像之后我们就可以来试运行下hello-world,执行命令:docker run hello-world后Docker会先检查本地是否存在名字叫hello-world的镜像,若不存在则去docker hub上下载该镜像,如果存在则将其挂载进容器并运行该容器实例。当看到Hello from Docker!则说明hello-world运行成功,执行docker ps -a命令后可以看到控制台显示了hello-world镜像的容器信息。
总结:
这里需要注意的就是docker官方镜像容易下载失败,所以最好配置下国内的镜像源。以上内容是小编给大家分享的【Docker实战003:运行hello Word并解决报错】,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。
为了方便学习,下面附上本文用到的源码:
# mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"] //"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"]}EOF# systemctl daemon-reload# systemctl restart docker# docker search hello-worldNAME DESCRIPTION STARS OFFICIAL AUTOMATEDhello-world Hello World! (an example of minimal Dockeriz… 1303 [OK] //*******省略********# docker pull hello-worldUsing default tag: latestlatest: Pulling from library/hello-world0e03bdcc26d7: Pull complete Digest: sha256:4cf9c47f86df71d48364001ede3a4fcd85ae80ce02ebad74156906caff5378bcStatus: Downloaded newer image for hello-world:latestdocker.io/library/hello-world:latest# docker pull hello-worldUsing default tag: latestError response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)// 安装dig工具获取DNS# yum install bind-utils # dig @114.114.114.114 registry-1.docker.io; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> @114.114.114.114 registry-1.docker.io; (1 server found);; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45167;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 512;; QUESTION SECTION:;registry-1.docker.io. IN A;; ANSWER SECTION:registry-1.docker.io. 41 IN A 35.174.73.84registry-1.docker.io. 41 IN A 52.4.20.24registry-1.docker.io. 41 IN A 52.72.232.213registry-1.docker.io. 41 IN A 3.218.162.19registry-1.docker.io. 41 IN A 54.236.131.166registry-1.docker.io. 41 IN A 52.54.232.21registry-1.docker.io. 41 IN A 3.211.199.249registry-1.docker.io. 41 IN A 52.5.11.128;; Query time: 53 msec;; SERVER: 114.114.114.114#53(114.114.114.114);; WHEN: 四 10月 01 21:59:03 CST 2020;; MSG SIZE rcvd: 177# vi /etc/hosts35.174.73.84 registry-1.docker.io# vim /etc/resolv.conf -------------------------------------------# Generated by NetworkManagersearch localdomainnameserver 192.168.1.2nameserver 8.8.4.4nameserver localdomain-------------------------------------------# systemctl restart docker# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest bf756fb1ae65 9 months ago 13.3kB# docker image lsREPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest bf756fb1ae65 9 months ago 13.3kB# docker run hello-worldHello from Docker!This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID: https://hub.docker.com/For more examples and ideas, visit: https://docs.docker.com/get-started/
二、如何用dockerfile如何生成一个hello world
如何使用Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。当前目录下包含Dockerfile,使用命令build来创建新的image,并命名为edwardsbean/centos6-jdk1.7:
docker build -t edwardsbean/centos6-jdk1.7 .
Dockerfile关键字
如何编写一个Dockerfile,格式如下:
# CommentINSTRUCTION arguments
FROM
基于哪个镜像
RUN
安装软件用
MAINTAINER
镜像创建者
CMD
container启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD.
CMD主要用于container时启动指定的服务,当docker run command的命令匹配到CMD command时,会替换CMD执行的命令。如:
Dockerfile:
CMD echo hello world
运行一下试试:
edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd
hello world
一旦命令匹配:
edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd echo hello edwardsbean
hello edwardsbean
ENTRYPOINT
container启动时执行的命令,但是一个Dockerfile中只能有一条ENTRYPOINT命令,如果多条,则只执行最后一条
ENTRYPOINT没有CMD的可替换特性
USER
使用哪个用户跑container
如:
ENTRYPOINT ["memcached"]
USER daemon
EXPOSE
container内部服务开启的端口。主机上要用还得在启动container时,做host-container的端口映射:
docker run -d -p 127.0.0.1:33301:22 centos6-ssh
container ssh服务的22端口被映射到主机的33301端口
ENV
用来设置环境变量,比如:
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
ADD
将文件
所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0
如果文件是可识别的压缩格式,则docker会帮忙解压缩
如果要ADD本地文件,则本地文件必须在 docker build
如果要ADD远程文件,则远程文件必须在 docker build
docker build github.com/creack/docker-firefox
docker-firefox目录下必须有Dockerfile和要ADD的文件
注意:使用docker build - < somefile方式进行build,是不能直接将本地文件ADD到container中。只能ADD
url file.
ADD只有在build镜像的时候运行一次,后面运行container的时候不会再重新加载了。
VOLUME
可以将本地文件夹或者其他container的文件夹挂载到container中。
WORKDIR
切换目录用,可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效
ONBUILD
ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行
三、如何在docker中运行windows
我们来了解一下 Windows 操作系统中的 Docker 以及在其中安装 Docker Windows 客户端的知识。Docker 引擎使用 Linux 特有的内核特性,因此不能通过 Windows 内核运行,所以,(在 Windows 上)Docker 引擎创建了一个小的虚拟系统运行 Linux 并利用它的资源和内核。这样,Windows Docker 客户端就可以用这个虚拟的 Docker 引擎来构建、运行以及管理 Docker 容器。有个叫 Boot2Docker 的团队开发了一个同名的应用程序,它创建了一个虚拟机来运行基于Tiny Core Linux特制的小型 Linux,来在 Windows 上运行 Docker 容器。它完全运行在内存中,需要大约 27M 内存并能在 5秒 (因人而异) 内启动。因此,在用于 Windows 的 Docker 引擎被开发出来之前,我们在 Windows 机器里只能运行 Linux 容器。下面是安装 Docker 客户端并在上面运行容器的简单步骤。
1. 下载 Boot2Docker
在我们开始安装之前,我们需要 Boot2Docker 的可执行文件。可以从 它的 Github 下载最新版本的 Boot2Docker。在这篇指南中,我们从网站中下载版本 v1.6.1。我们从那网页中用我们喜欢的浏览器或者下载管理器下载了名为 docker-install.exe 的文件。
2. 安装 Boot2Docker
现在我们运行安装文件,它会安装 Window Docker 客户端、用于 Windows 的 Git(MSYS-git)、VirtualBox、Boot2Docker Linux ISO 以及 Boot2Docker 管理工具,这些对于开箱即用地运行全功能的 Docker 引擎都至关重要。
3. 运行 Boot2Docker
安装完成必要的组件之后,我们从桌面上的“Boot2Docker Start”快捷方式启动 Boot2Docker。它会要求你输入以后用于验证的 SSH 密钥。然后会启动一个配置好的用于管理在虚拟机中运行的 Docker 的 unix shell。
检查否确配置运行面 docker version 命令
docker version
4. 运行 Docker
由于 Boot2Docker Start 自启已经确设置环境变量 shell我马始使用 Docker请注意我要 Boot2Docker 作远程 Docker 守护进程要 docker 命令前加 sudo
现让我试试 hello-world 例镜像载 hello-world 镜像运行并输 "Hello from Docker" 信息
$ docker run hello-world
5. 使用命令提示符(CMD) 运行 Docker
现想始用命令提示符使用 Docker打命令提示符(CMD.exe)由于 Boot2Docker 要求 ssh.exe PATH 我需要命令提示符输入命令使 %PATH% 环境变量包括 Git 安装目录 bin 文件夹
set PATH=%PATH%;"c:\Program Files (x86)\Git\bin"
运行面命令我命令提示符运行 boot2docker start 启 Boot2Docker 虚拟机
boot2docker start
注意: 看 machine does no exist 错误信息运行 boot2docker init 命令
复制图控制台标命令 cmd.exe 控制台窗口设置环境变量我像平运行 docker 容器
6. 使用 PowerShell 运行 Docker
能 PowerShell 运行 Docker我需要启 PowerShell 窗口并添加 ssh.exe PATH 变量
$Env:Path="${Env:Path};c:\Program Files (x86)\Git\bin"
运行完面命令我需要运行
boot2docker start
打印用于设置环境变量连接虚拟机内部运行 Docker PowerShell 命令我需要 PowerShell 运行些命令平运行 docker 容器
7. 用 PUTTY 登录
Boot2Docker %USERPROFILE%.ssh 目录使用用于登录公共私密钥我需要使用文件夹私密钥私密钥需要转换 PuTTY 格式我通 puttygen.exe 实现
我需要打 puttygen.exe 并 %USERPROFILE%.ssh\id_boot2docker 导入("File"->"Load" 菜单)私钥点击 "Save Private Key"用保存文件通 PuTTY 用 docker@127.0.0.1:2022 登录
8. Boot2Docker 选项
Boot2Docker 管理工具提供些命令所示
$ boot2docker
Usage: boot2docker.exe [
总结
通 Docker Windows 客户端使用 Docker 趣Boot2Docker 管理工具能使任何 Docker 容器能像 Linux 主机平滑运行棒应用程序更仔细发现 boot2docker 默认用户用户名 docker密码 tcuser新版本 boot2docker 设置 host-only 网络适配器提供访问容器端口般说 192.168.59.103通 VirtualBox DHCP 实现改变