Docker常用命令

2020-10-17  本文已影响0人  learninginto

Docker是一个开源的应用容器引擎,基于Go语言,遵从Apache2.0协议开源。让开发者可以打包他们的应用以及以来包到一个可移植的镜像中,然后发布到任何Linux或Windows上,也可以实现虚拟化。

为什么要使用Docker?

它可以消除协作编码时“在我的机器上可以正常工作”的问题。

构建镜像

构建镜像有docker comomitdocker build、Dockerfile文件两种方式,我们不推荐使用docker commit命令,而应该使用更灵活、更强大的Dockerfile来构建Docker镜像。

受限需要注册一个账号,并在注册后通过收到的邮件来激活

docker login 域名
Username:lxc
Password:
Email:learninginto@163.com
Login Succeeded

该命令会完成登录到Docker Hub的工作,并将认证信息保存起来以供后面使用。

个人认证信息会保存到$HOME/.dockercfg文件中

创建一个包含简单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 
docker push docker-hub.cloud.top/vdfw3/center-web:latest
docker ps

在Docker Hub上查找所有带有puppet的镜像

docker search puppet
docker exec -ti 557571d5655c sh
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-compose up -d
docker-compose restart "名称"
//对应docker-compose.yml中的名称
上一篇下一篇

猜你喜欢

热点阅读