浅学Docker

本文介绍了Docker的基础知识,包括容器、镜像和仓库的概念,并展示了如何启动容器、构建镜像以及使用Docker Compose管理多容器应用。还提到了Docker的最佳实践,如安全扫描和镜像层查看。适合初学者快速上手Docker。
摘要由CSDN通过智能技术生成

Docker

因玩,需要在云服务器安装mongodb环境,又常听后端小伙伴说docker怎么怎么好,于是学习一波,后将mongodb装在docker的容器中,看看它有多好。

1、概念

ps: 概念方面写多是自己的白话理解,直观、方便理解记忆。

Docker就像个虚拟机,与主机环境分割,且能像应用程序安装包(.exe/.dmg)一样方便地打包、卸载、重装。其试错成本低、一致性高,无论是新手用于捣鼓服务器、还是老手用于做镜像备份都大有裨益。这也是我了解Docker以后决定使用它的原因。

1.1 容器 container

被主机所有其他进程隔离的单独进程,也是镜像运行后的实例,类比虚拟机。每个容器有自己的环境。一般不相互影响。

1.2 镜像 image

只读,类似安装包。可从镜像生成容器,也可从自定义的环境生成镜像,用于部署类似环境的其他容器。

1.3 仓库 docker hub

类似git,用于镜像的工作流管理。

2、命令

2.1 启动容器

getting-started 是docker官方的一个教程向的镜像,启动之后可以跟着教程学习docker的相关知识(英文)。

# 从镜像getting-started启动容器
$ docker run -dp 80:90 getting-started

# -d 以分离模式在后台运行
# -p port1:port2 映射主机port1端口到容器的port2端口

# 查看 docker 容器状态
$ docker ps
# 停止容器
$ docker stop <the-container-id>
# 删除容器
$ docker rm <the-container-id>

# 查看本地镜像
$ docker image ls

2.2 构建docker镜像

假设项目目录为/app

新建文件/app/Dockerfile

FROM node:12-alpine
# 添加构建工具确保 yarn install 可以在 苹果芯片或arm64机器上可以运行
RUN apk add --no-cache python3 g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
# 指定容器启动后的命令
CMD [ "node","src/index.js" ]

打包

# 打包镜像
$ docker build -t <image-name> .
# -t 镜像命名
# . Dockefile所在目录

与dockerhub交互

# 登录到dockerhub
$ docker login -u YOUR-USER-NAME
# 给仓库加<tag>
$ docker <tag> <tag-name> YOUR-USER-NAME/<respository-name>
# push镜像到仓库
$ docker push YOUR-USER-NAME/<respository-name>[<tag>]
# 运行仓库镜像
$ docker run -dp port-host:post-container USER-NAME/<respository-name>

2.3 Volumes

卷。用以在主机中存储数据。可分为 Named Volumes 和 Bind Mounts。

Named Volumes
可用于持久化数据、共享容器数据。

# 创建命名卷
$ docker volume create <volumn-name>
# 连接命名卷启动容器
$ docker run -dp <port-host>:<port-container> -v <volume-name>:<container-path> <image-name>

Bind Mounts
可关联host文件与container,可用于本地开发docker时的热重载。
考虑暂不使用,浅尝辄止,略。

3、Docker Compose

用于管理多容器应用的工具。
由项目根目录的YAML(.yml)文件声明。

# docker-compose.tml
version: "3.7"

services:
  app:
    image: node:12-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos

  mysql:
    image: mysql:5.7
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment: 
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos

volumes:
  todo-mysql-data:

4、涉及构建镜像最佳实践的其他命令

浅尝辄止,暂不深入

# 安全扫描
$ docker scan <image-name>

# 查看镜像层(命令、大小)
$ docker image history <image-name>

# .dockerignore
node_modules
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值