我正在参加「掘金·启航计划」
介绍一下:
本文主要内容是,在 centos 系统上,安装 docker ,和使用 docker 创建容器,构建镜像,部署 web 应用,以动手实践为主要内容。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
下面会涉及到镜像和容器,其中镜像类似于 WIndows 系统的 ISO 文件,需要容器来运行。容器类似于电脑,为镜像提供独立的运行环境。
CentOS 安装 Docker
使用官方安装脚本自动安装,命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
查看是否安装成功
docker version
启动 docker 服务端
systemctl start docker
Docker 镜像加速
阿里云镜像获取地址
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
容器操作相关命令
创建容器
docker container run < image name >
image 代表一个镜像的名称
docker container run nginx
查看容器
docker container ls -a
- -a 查看所有,默认查看正在运行的
停止正在运行的容器
docker container stop <name or ID>
停止正在运行的容器
docker container start <name or ID>
删除容器
当我们停止容器之后,容器并没有删除,而只是停止掉了。这时候你可以使用下面的命令删除容器。
docker container rm <name or ID>
Docker端口映射
用Nginx举例:
docker container run -d -p 80:80 nginx
- -d detached 后台运行模式
- -p 第一个端口是映射到服务器本机的端口;第二个端口是Docker容器使用的端口。
后台运行模式,转换成前台运行
docker attach <ID or Image Name>
detached 模式下的交互
docker exec -it <ID or Image name> sh
查看容器状态
docker container ls -a
查看容器使用的端口号
docker container inspect --format '{{.Config.ExposedPorts}}' <ContainerID>
构建镜像
Dockerfile 脚本方式
新建项目目录,并创建指定文件
mkdir -p /home/staticPage && cd /home/staticPage
新建 index.html 文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>staticPage</title>
</head>
<body>
这是一个静态页面,使用 docker 容器部署。。。
</body>
</html>
新建 Dockerfile 脚本文件
# 选择基础镜像 alpine 小巧去掉部分功能
FROM nginx:alpine
# 进入到工作目录
WORKDIR /usr/share/nginx/html/
# 把本地文件,复制到镜像中
COPY ./index.html /usr/share/nginx/html/
# 端口号
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
构建镜像命令
docker image build -t html:v0.1 .
- -f 指定Dockerfile 名称
- -t 镜像名称
- . 当前目录
查看镜像列表
docker image ls
容器运行镜像
docker container run -d -p 80:80 IMAGE ID
删除镜像
docker image rm <Image ID>
当有容器在使用镜像时,是没有办法被删除的。先删除容器,才可以删除镜像。
批量清除容器(没有运行的会清除)
docker system prune -f
批量清除镜像
docker image prune -a
Dockerfile 文件中相关命令
-
RUN 命令最好写在一行执行,经验可以减少分层和包大小
RUN apt-get update && \ apt-get install -y wget
-
COPY 和 ADD 命令,向镜像添加文件
其中 ADD 命令可以解压后添加文件
-
WORKDIR 命令,类似 cd 命令
WORKDIR /app
-
ARG 和 ENV 命令设置变量
区别
- ENV 的变量可以带到进行里,ARG 不可以
- ARG 可以打包时设置变量 --build-arg VERSION=2.0.0
# 2中设置变量方法 ENV VERSION=2.0.1 ARG VERSION=2.0.1 # 使用变量 ${VERSION}
交互式进入镜像
env 查看基础信息
-
CMD 命令
只执行最后一条,会覆盖之前的 CMD 命令
# exe 写发 CMD ["nginx", "-g", "daemon off;"] # shell 写法 CMD nginx -g daemon off
以上就是我在学习 docker 过程中用到的内容,后期在继续补充。。。