【Docker】docker基本使用

三层概念

  • 仓库:类似于Github或者Gitlab,不是保存代码,而是用来保存镜像。(Docker Hub)
  • 镜像IMAGE:Docker镜像,相当于一个系统,容器基于镜像的环境运行,例如Ubuntu:14.04(冒号后面表示版本,可以自定义版本号名,如dev、test、prod)
  • 容器CONTAINER:容器是镜像运行的实体,可以被创建、启动、停止、删除、暂停等。

Docker安装

Docker一般都在Linux系统上运行,实际在windows系统上安装时也是虚拟出一个Linux系统环境运行。安装只需要几行命令即可,可见官网文档。
需要注意的是windows家庭版安装docker会报错,需要升级到专业版,打开Hype-V功能。

Docker基本使用

docker run ubuntu:14.04  /bin/echo "Hello world"

以上命令表示使用ubuntu14.04的镜像创建一个容器,运行/bin/echo “hello world”的命令,当本地找不到该镜像时,会自动去Docker-Hub下载对应的镜像。

使用

docker image ls
docker ps -a

分别查看docker镜像和容器,不加-a可以查看正在运行的容器。

docker run -d ubuntu:15.10  /bin/sh -c "while true; do echo hello world; sleep 1; done"

该行命令创建了一个容器运行后面的shell命令,-d表示在后台运行,此时该容器一只在每隔一秒打印hello world的信息。使用

docker logs <容器名或者容器id>

可以查看对应容器打印的信息。

docker start <容器名或者容器id>
docker stop <容器名或者容器id>

上面两条命令可以启动或者停止容器。

docker exec -it <容器名或者容器id> /bin/bash

使用上面的命令可以进入容器查看容器内的文件结构,可以把容器看成是一个单独的操作系统,cat /proc/versionls分别查看当前系统的版本信息和当前目录下的文件列表.
除了exec进入容器还可以使用attach,但attach进入容器使用exit退出后会自动停止容器,所以建议使用exec进入容器。

docker pull <镜像>

我们可以使用该命令从远程下载一个镜像。

docker export <容器id或者容器名> > xxxx.tar

上面命令可以把容器导出到本地文件xxxx.tar

cat docker/ubuntu.tar | docker import  - test/ubuntu:v1

该命令用于把本地文件导入到test/ubuntu:v1镜像中。

docker rm <容器id或者容器名>

该命令用于删除一个容器

docker rmi <镜像名>

该命令用于删除一个镜像,删除镜像前需要删除建立在该镜像下的所有容器。

使用Dockerfile定制镜像

在宿主机一个空文件夹下创建一个Dockerfile文件(非空目录会把目录下的所有文件一起打包到镜像,造成不必要的时间空间的浪费)
首先创建一个c语言程序,编译一个打印helloworld的可执行文件。
lsIMIU.png
使用gcc编译后得到hello可执行文件,然后对Dockerfile进行编辑输入

lsIyQA.png

FROM表示使用ubuntu:14.04的镜像,ADD表示将当前目录下的hello文件复制到容器内的/mydir/目录下,CMD则表示执行容器内该目录下的程序。

使用该Dockerfile创建镜像并运行如下:

lsoEFO.png
上面的ADD可以替换成COPY,CMD可以替换成RUN,COPY表示复制文件但是不解压,而ADD会自动对压缩文件进行解压然后复制,CMD运行时机为Docker run,而RUN则为docker build。
此外,还有很多Dockerfile的命令,可见:

https://www.runoob.com/docker/docker-dockerfile.html