Wang's blog Wang's blog
首页
  • 前端文章

    • HTML教程
    • CSS
    • JavaScript
  • 前端框架

    • Vue
    • React
    • VuePress
    • Electron
  • 后端技术

    • Npm
    • Node
    • TypeScript
  • 编程规范

    • 规范
  • 我的笔记
  • Git
  • GitHub
  • VSCode
  • Mac工具
  • 数据库
  • Google
  • 服务器
  • Python爬虫
  • 前端教程
更多
收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Wang Mings

跟随大神,成为大神!
首页
  • 前端文章

    • HTML教程
    • CSS
    • JavaScript
  • 前端框架

    • Vue
    • React
    • VuePress
    • Electron
  • 后端技术

    • Npm
    • Node
    • TypeScript
  • 编程规范

    • 规范
  • 我的笔记
  • Git
  • GitHub
  • VSCode
  • Mac工具
  • 数据库
  • Google
  • 服务器
  • Python爬虫
  • 前端教程
更多
收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Go

  • MD

  • Git

  • Image

  • GitHub

  • Google

  • VSCode

  • Mac工具

  • 数据库

  • 服务器

    • Linux

    • Nginx

    • Docker

      • docker使用
        • 安装
          • MacOS Docker 安装
          • MacOS Docker 镜像加速
          • CentOs Docker 安装
          • CentOS7 镜像加速
        • docker 常用命令
          • 批量操作
        • docker 容器的使用
          • 1. 先获取镜像
          • 2. 启动容器
          • 启动已停止运行的容器
          • 后台运行容器
          • 进入容器
          • 导出容器
          • 导入容器
        • Docker 安装 CentOS
        • Docker 安装 Nginx
        • Docker 安装 Node.js
        • Dockerfile
          • 创建镜像
          • 项目的Dockerfile文件
        • 常见错误
          • 上传自己的镜像被拒绝denied: requested access to the resource is denied
  • 工具
  • 服务器
  • Docker
wangmings
2022-07-19
目录

docker使用

# docker使用

参考教程 菜鸟 docker教程 (opens new window)

# 安装

# MacOS Docker 安装

docker 官网下载 (opens new window)

点击 Mac with intel chip 按钮下载

如同 macOS 其它软件一样,安装也非常简单,双击下载的 .dmg 文件,然后将鲸鱼图标拖拽到 Application 文件夹即可。

从应用中找到 Docker 图标并点击运行。可能会询问 macOS 的登陆密码,输入即可。

启动终端后,通过命令可以检查安装后的 Docker 版本。

docker --version
1

# MacOS Docker 镜像加速

我们mac安装 docker 新版 2.2的时候,和菜鸟教程的版本不一样了。

MAC版 的最新Docker 2.2版本配置国内代理的解决办法 (opens new window)

Preferences(就是设置图标) -> Docker Engine

在输入框中加上

"registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn", // 中国某高等大学的
    "https://hub-mirror.c.163.com" // 网易的
]
1
2
3
4

点击按钮 Apply & Restart 重启即可

在终端输入

docker info
1

能看到

Registry Mirrors:
https://docker.mirrors.ustc.edu.cn/
https://hub-mirror.c.163.com/

就是成功了

# CentOs Docker 安装

使用官方安装脚本自动安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
1

启动 Docker。

sudo systemctl start docker
1

# CentOS7 镜像加速

对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):

{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}
1

之后重新启动服务:

sudo systemctl daemon-reload
sudo systemctl restart docker
1
2

docker info 命令查看,结果内容中看到以下内容,说明配置成功。

Registry Mirrors:
    https://reg-mirror.qiniu.com
1
2

# docker 常用命令

  • docker --version 查看版本
  • docker info 查看配置信息
  • docker pull [镜像地址] 下载镜像到本地
  • docker images 查看本地已安装的镜像
    • REPOSITORY:表示镜像的仓库源
    • TAG: 镜像的标签
    • IMAGE ID: 镜像ID
    • CREATED: 镜像创建时间
    • SIZE: 镜像大小
  • docker build -t [镜像名称] . .是当前目录,根据当前目录的Dockerfile文件创建一个镜像
  • docker rmi 镜像ID 删除镜像
  • docker ps 查看每个容器的运行信息
    • CONTAINER ID: 容器 ID。
      • IMAGE: 使用的镜像。
      • COMMAND: 启动容器时运行的命令。
      • CREATED: 容器的创建时间。
      • STATUS: 容器状态,状态有7种:
        • created (已创建)
        • restarting (重启中)
        • running 或 Up(运行中)
        • removing (迁移中)
        • paused (暂停)
        • exited (停止)
        • dead (死亡)
        • PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
        • NAMES: 自动分配的容器名称。
  • docker ps -a 查看每个容器(包括已经暂停的)的运行信息
  • docker run -itd -p 8080:80 --name vueapp [镜像名称] 使用某个镜像启动一个容器, -d 后台开启
  • docker stop [CONTAINER ID] 停止指定的容器
  • docker start [CONTAINER ID] 启动指定的容器
  • docker restart <容器 ID> 重启指定的容器
  • docker rm -f [CONTAINER ID] 删除指定的容器
  • docker container prune 删除掉所有处于终止状态的容器
  • docker exec -it [容器 id] /bin/bash 进入容器( 要启动状态才能进入 )
  • docker logs [CONTAINER ID] 查看容器内的标准输出
  • docker export [CONTAINER ID] > node.tar 导出容器
  • docker logout localhost:8080 退出登录
  • docker login --username=xxx --password=xxx registry.cn-shenzhen.aliyuncs.com 登录
  • docker tag [ImageId] xxx/namespace/vueapp:[镜像版本号]

# 批量操作

  • docker ps -aq 列出所有的容器 ID
  • docker stop $(docker ps -aq) 停止所有的容器
  • docker rm $(docker ps -aq) 删除所有的容器
  • docker rmi $(docker images -q) 删除所有的镜像
  • docker image prune --force --all或者docker image prune -f -a 删除所有不使用的镜像
  • docker container prune -f 删除所有停止的容器

# docker 容器的使用

# 1. 先获取镜像

docker pull node
1

# 2. 启动容器

以下命令使用 node 镜像启动一个容器,参数为以命令行模式进入该容器:

docker run -it --name node-test node /bin/bash
1

参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • node: node 镜像。
  • name: 自定义容器名称
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

要退出终端,直接输入 exit

# 启动已停止运行的容器

查看所有的容器命令如下:

docker ps -a
1

使用 docker start 启动一个已停止的容器:

docker start b750bbbcfd88 
1

# 后台运行容器

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。

docker run -itd --name node-test node

1
2

注:加了 -d参数默认不会进入容器,想要进入容器需要使用指令 docker exec(下面会介绍到)。

# 进入容器

docker exec -it [容器 id] /bin/bash
1

# 导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

docker export [容器 id] > node.tar
1

这样将导出容器快照到本地文件。

# 导入容器

# Docker 安装 CentOS

1、查看可用的 CentOS 版本

访问 CentOS 镜像库地址:https://hub.docker.com/_/centos?tab=tags&page=1 (opens new window)。

2、拉取指定版本的 CentOS 镜像,这里我们安装指定版本为例(centos7):

docker pull centos:centos7
1

3、查看本地镜像

使用以下命令来查看是否已安装了 centos7:

docker images
1

4、运行容器

docker run -itd --name centos-test centos:centos7
1

5、 查看容器的运行信息

docker ps
1

5、并且可以通过 exec 命令进入 CentOS 容器。(相当于进入 centOS 系统,想退出系统可以使用 exit)

docker exec -it centos-test /bin/bash
1

# Docker 安装 Nginx

1、查看可用的 Nginx 版本

访问 Nginx 镜像库地址: https://hub.docker.com/_/nginx?tab=tags (opens new window)。

2、取最新版的 Nginx 镜像

docker pull nginx:latest
1

3、查看本地镜像

使用以下命令来查看是否已安装了 nginx:

docker images
1

4、运行容器

安装完成后,我们可以使用以下命令来运行 nginx 容器:

docker run --name nginx-test -p 8080:80 -d nginx
1

参数说明:

  • --name nginx-test:容器名称。
  • -p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
  • -d nginx: 设置容器在在后台一直运行。

5、最后我们可以通过浏览器可以直接访问 8080 端口的 nginx 服务:

localhost:8080
1

# Docker 安装 Node.js

1、查看可用的 Node 版本

访问 Node 镜像库地址: https://hub.docker.com/_/node?tab=tags (opens new window)

2、取最新版的 node 镜像

docker pull node:latest
1

3、查看本地镜像

docker images
1

4、运行容器

安装完成后,我们可以使用以下命令来运行 node 容器

参数说明:

--name node-test:容器名称。

docker run -itd --name node-test node
1

5、最后进入查看容器运行的 node 版本:

docker exec -it node-test /bin/bash

node -v
1
2
3

# Dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

  • FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
  • RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

shell 格式:

RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。
1
2

exec 格式:

RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
1
2
3

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:

FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz
1
2
3
4
5
6
7
8
9

如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。

# 创建镜像

-t 是给镜像命名 . 是基于当前目录的Dockerfile来构建镜像

docker build -t vuenginxcontainer .
1

# 项目的Dockerfile文件

// Dockerfile
FROM node:14.15.3 as builder
COPY . /app
WORKDIR /app
RUN npm install --registry=https://registry.npm.taobao.org
RUN npm run build

FROM nginx

COPY --from=builder /app/dist /usr/share/nginx/html
COPY --from=builder /app/nginx/default.conf /etc/nginx/conf.d/default.conf
CMD ["nginx", "-g", "daemon off;"]
1
2
3
4
5
6
7
8
9
10
11
12

我们来分析下上的代码:

  • FROM node:14.15.3 as builder 安装使用node:14.15.3镜像,并给他应该别名 builder

  • COPY . /app 拷贝当前目录所有文件,放到镜像的/app目录下, .就是代表当前目录 /app 代表在镜像上的目录路径

  • WORKDIR /app 镜像内的工作目录是 app, 就是你使用命令进入镜像的时候,终端左边的目录就是app

  • RUN npm install --registry=https://registry.npm.taobao.org RUN是执行命令,执行了后面的命令 npm install

  • RUN npm run build 执行了 npm run build

  • FROM nginx 安装使用nginx镜像

  • COPY --from=builder /app/dist /usr/share/nginx/html --from=builder 是等待上面的安装完成后(也就是等 FROM nginx上面的命令都执行完之后,才执行) 注意,这里为什么要用 /app/dist, 因为上面上面设置了 WORKDIR /app, 然后我们 --from=builder 等待上面的命令生成,这时的镜像工作目录是/app,/app目录下已经有了dist文件夹内容,因为我们在镜像内执行了命令npm run build,所以我们可以直接从镜像的路径 /app/dist 拷贝到 /usr/share/nginx/html

  • COPY --from=builder /app/nginx/default.conf /etc/nginx/conf.d/default.conf 同上原理

  • CMD ["nginx", "-g", "daemon off;"] 为了防止docker容器执行完命令挂掉(想了解更多,可以自行谷歌,也可以参考docker运行nginx为什么要使用 daemon off (opens new window))

由于我们上面用到了nginx,而且用到了 /app/nginx/default.conf 路径

所以我们得在项目根目录新建个nginx文件夹,nginx文件夹里面新建个default.conf文件

// default.conf
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;
    error_log  /var/log/nginx/error.log  error;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

.dockerignore 指定在传递给 docker引擎 时需要忽略掉的文件或文件夹。

# 常见错误

# 上传自己的镜像被拒绝denied: requested access to the resource is denied

信息显示是拒接访问,因为tag的名字斜线前面部分不是本人的用户名,下面把它修改为mydockerapp/xxxxx就push成功。需要注意的是mydockerapp是本人的docker用户名。进入docker hub网站查看,发现多了一个公共的repository。

docker login --username=xxx xxx.com
docker tag [ImageId] xxx/namespace/vueapp:[镜像版本号]
docker push xxx/namespace/vueapp:[镜像版本号]
1
2
3
编辑 (opens new window)
Nginx配置密码访问网页

← Nginx配置密码访问网页

最近更新
01
theme-vdoing-blog博客静态编译问题
09-16
02
搜索引擎
07-19
03
友情链接
07-19
更多文章>
Theme by Vdoing | Copyright © 2019-2022 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式