为什么要用docker
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
docker的安装
使用国内的daocloud一键安装docker:
curl -sSL https://get.daocloud.io/docker | sh
docker镜像的使用
docker 查看本地镜像:
# 这两条命令是等价的
$ sudo docker images
$ sudo docker image ls
csdn_test@My-Ubuntu:~/桌面$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
php_php-fpm latest 6c7433e2d587 2 weeks ago 187MB
phpdockerio/php74-fpm latest 6c7433e2d587 2 weeks ago 187MB
myubuntu latest 50ecb1eab6a9 2 weeks ago 75MB
wordpress latest c2dd1984ad5b 2 weeks ago 551MB
nginx latest d1a364dc548d 4 weeks ago 133MB
ossrs/srs latest 2070fa4a7a41 8 weeks ago 242MB
ubuntu 20.04 7e0aa2d69a15 2 months ago 72.7MB
training/webapp latest 6fae60ef3446 6 years ago 349MB
参数介绍:
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
当然,也可以用docker下载一个新的镜像,比如这里我下载一个mysql镜像:
$ sudo docker pull mysql:5.7
通过pull去下载一个新的镜像,当然5.7也可以省略,docker默认会下载一个最新的mysql镜像,或者也可以直接新建容器让docker自动下载一个最新的镜像。
docker删除镜像操作,这里同样以mysql为例:
# 以下两种方法任选一种
$ sudo docker rmi mysql
$ sudo docker image rm mysql
docker 容器的使用
拉取下来镜像之后,需要新建一个容器才能运行。
启动容器
$ sudo docker run -it ubuntu /bin/bash
参数介绍:
- -i: 交互式操作。
- -t: 终端。
- ubuntu: ubuntu 镜像。
- /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
镜像也可以后台运行
$ sudo docker run -d --name nginx --rm nginx
参数介绍:
- -d后台运行镜像。
- –name:给这个镜像赋予一个名字。
- –rm:关闭这个容器后自动删除容器。
- nginx:nginx镜像。
也可以通过-p参数来重定向端口。
查看容器
sudo docker ps -a
- -a是查看所有容器,如果不带 -a 则只查找正在运行的容器。
停止一个容器
$ sudo docker stop nginx
启动一个已有的容器
$ sudo docker start nginx
删除容器
$ sudo docker rm <容器id/name>
也可以一键删除所有容器
sudo docker rm -f `docker ps -aq`
容器的挂载
用docker run -it -v 主机目录:容器目录就可以实现主机和容器目录的挂载,数据就会同步。
Dockerfile文件的创建
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
Dockerfile指令:
指令 | 详解 | 操作 |
---|---|---|
FROM | 定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。 | FROM 镜像 |
RUN | 用于执行后面跟着的命令行命令。 | RUN <命令行命令> |
COPY | 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。 | COPY [–chown=< user >:< group >] <源路径1>… <目标路径> |
CMD | 容器开启时运行的命令,与RUN命令类似 | CMD <shell 命令> |
ENV | 设置环境变量。 | ENV < key1 >=< value1 > < key2 >=< value2 >… |
WORKDIR | 指定工作目录。 | WORKDIR <工作目录路径> |
USER | 用于指定执行后续命令的用户和用户组。 | USER <用户名>[:<用户组>] |