Docker是一个开源的应用容器引擎,基于Go语言,遵从Apache2.0协议开源。让开发者可以打包他们的应用以及以来包到一个可移植的镜像中,然后发布到任何Linux或Windows上,也可以实现虚拟化。
为什么要使用Docker?
它可以消除协作编码时“在我的机器上可以正常工作”的问题。
构建镜像
构建镜像有
docker comomit
和docker build
、Dockerfile文件两种方式,我们不推荐使用docker commit命令,而应该使用更灵活、更强大的Dockerfile来构建Docker镜像。
- 创建Docker Hub账号
受限需要注册一个账号,并在注册后通过收到的邮件来激活
- 登录
docker login 域名
Username:lxc
Password:
Email:learninginto@163.com
Login Succeeded
该命令会完成登录到Docker Hub的工作,并将认证信息保存起来以供后面使用。
个人认证信息会保存到$HOME/.dockercfg文件中
- 创建第一个Dockerfile
创建一个包含简单Web服务器的Docker镜像,之后使用docker build命令基于该Dockerfile中的指令构建一个新的镜像
mkdir static_web
cd static_web
touch Dockerfile
我们创建了一个名为static_web的目录来保存Dockerfile,这个目录就是我们的构建环境,在Docker中称该环境为上下文。
Docker会在构建镜像时将上下文中的文件和目录上传到Docker守护进程,这样就能直接访问在镜像中存储的任何代码、文件或其他数据。
# Version:0.0.1 这是一条注释,以#开头
FROM ubunto:14.04
MAINTAINER lxc "learninginto@163.com"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hi, I am in your container' \
>/user/share/nginx/html/index.html
EXPOSE 80
该Dockerfile由一系列指令和参数组成。每条指令,如FROM,都必须为大写字母,且后面要跟随一个参数,FROM指令指定一个已经存在的镜像(基础镜像),后续指令都将基于该镜像进行。指令的执行会按照从上到下的顺序,所以应该合理地安排指令的顺序。
最后,设置了EXPOSE指令,告诉Docker该容器内的应用程序将会使用容器的指定端口。可以指定多个EXPOSE指令来向外部公开多个端口。
基于Dockerfile构建新镜像
cd static_web
docker build -t="lxc/static_web" .
通过指定-t为新镜像设置仓库和名称,lxc为仓库名,static_web为镜像名。
也可以在构建镜像的过程中设置一个标签:"镜像名:标签"
docker build -t="lxc/static_web:v1" .
如果没有制定任何标签,Docker将会自动为镜像设置一个lastest标签。
上面命令行最后的“.”告诉Docker到本地目录去找Dockerfile文件,也可以指定一个Git仓库的源地址来指定Dockerfile的位置
docker build -t="lxc/static_web:v1" \ git@github.com:lxc/docker-static_web
再回到docker build过程,可以看到构建上下文已经上传到了Docker守护进程
Send build context to Docker damon 2.56kB
如果在构建上下文的根目录下存在以。dockerignore命名的文件,那么该文件的内容会被按行分割,非常像.gitignore文件,用来设置哪些文件不会被上传到构建上下文中。
- 指令失败会怎样
假设在第四步中将软件包的名字弄错了,比如写成了ngin,最终在操作结果会停留在第四步,提示:
Unable to locate package ngin
可以用docker run 命令从目前为止已经成功的最后一步创建一个容器。
docker run -t -i 9942423ld4 /bin/bash
这时在容器中可以再次运行
apt-get install -y
ngin,并指定正确的包名,直到解决问题,退出容器,使用正确的包名修改Dockerfile文件,之后再尝试进行构建。
打包完之后,提示successfully
再查看刚刚打包的镜像是否存在,若镜像没有更改可能不会生成新的镜像
查看所有的镜像
docker images
本地镜像都保存在Docker宿主机的/var/lib/docker目录下
- 查看镜像构建过程
docker history 22342sd432
- 将镜像push到远程
docker push docker-hub.cloud.top/vdfw3/center-web:latest
- 查看已经运行的容器
docker ps
- 查找镜像
在Docker Hub上查找所有带有puppet的镜像
docker search puppet
- 进入docker容器
docker exec -ti 557571d5655c sh
- 删除docker镜像
docker rmi "id"
可以通过下面的技巧,一次删除所有容器
docker rm `docker ps -a -q`
上面的docker ps命令会列出当前全部容器,-a列出所有(all)容器,而-q标示只需要返回容器的ID,这样我们就得到了容器的列表,传给docker rm命令,从而达到删除所有容器的目的。
- 拉取镜像
docker pull docker-hub.cloud.top/vdfw/nginx:1.16.1-alpine
- 修改权限
进入到文件目录外层
chmod -r 777 文件名
- 查看日志报错信息
docker-compose logs -f "名称"
docker logs "id"
- 重启docker进程
//进入相应目录
docker-compose up -d
docker-compose restart "名称"
//对应docker-compose.yml中的名称
网友评论