Docker 应用容器

60 阅读3分钟

我正在参加「掘金·启航计划」

介绍一下:

本文主要内容是,在 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 文件中相关命令

  1. RUN 命令最好写在一行执行,经验可以减少分层和包大小

    RUN apt-get update && \
        apt-get install -y wget
    
  2. COPY 和 ADD 命令,向镜像添加文件

    其中 ADD 命令可以解压后添加文件

  3. WORKDIR 命令,类似 cd 命令

    WORKDIR /app
    
  4. ARG 和 ENV 命令设置变量

    区别

    • ENV 的变量可以带到进行里,ARG 不可以
    • ARG 可以打包时设置变量 --build-arg VERSION=2.0.0
    # 2中设置变量方法
    ENV VERSION=2.0.1
    ARG VERSION=2.0.1# 使用变量
    ${VERSION}
    

    交互式进入镜像

    env 查看基础信息
    
  5. CMD 命令

    只执行最后一条,会覆盖之前的 CMD 命令

    # exe 写发
    CMD ["nginx", "-g", "daemon off;"]
    # shell 写法
    CMD nginx -g daemon off
    

以上就是我在学习 docker 过程中用到的内容,后期在继续补充。。。