docker入门

本文介绍了Docker的基本操作,包括安装、镜像、容器、仓库的核心概念,以及如何使用Docker构建Nginx和Node.js应用。同时,讲解了Docker-Compose的使用,通过YML文件管理多容器应用,并通过示例展示了如何创建和运行一个包含Nginx和Node.js服务的compose应用。
摘要由CSDN通过智能技术生成

准备工作

  1. Docker官网下载并安装Docker客户端。

    安装成功后,在终端执行docker --version,成功看见下图信息说明docker安装成功。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2cvmZ2HB-1616579689080)(/Users/candice/Downloads/博客图片/Docker安装与使用/安装成功.png)]

  2. 注册Docker账号

  3. 国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。

    • Azure中国镜像(https://dockerhub.azk8s.cn)

    • 阿里云加速器(需登录账号获取)

    • 七牛云加速(https://reg-mirror.qiniu.com)
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wGl236PX-1616579689082)(/Users/candice/Downloads/博客图片/Docker安装与使用/设置镜像步骤.png)]

      设置成功之后,再在终端上执行docker info来检查加速镜像是否生效。
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gHlZPABY-1616579689086)(/Users/candice/Downloads/博客图片/Docker安装与使用/镜像设置成功.png)]

到这里Docker的准备工作就结束了。

Docker的使用

在使用Docker之前,我们先搞懂什么是Docker?它又有什么特点?和传统的虚拟机比又有什么区别?那接下来就一一回答上面的问题。

  1. 什么是Docker?

    • Docker是一个开源的应用容器引擎,基于go语言开发。
    • Build,Ship and Run Any App, Anywhere 一次封装,到处执行。
    • 基于linux的高效、敏捷、轻量级的容器(轻量虚拟)方案。
  2. 特点

    • 高效的利用系统资源
    • 快速的启动时间
    • 一致的运行环境
    • 持续交付和部署
    • 更轻松的迁移
  3. 对比传统虚拟机总结
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LW2nkHXO-1616579689090)(/Users/candice/Downloads/博客图片/Docker安装与使用/传统虚拟机对比.png)]

  4. 核心概念镜像,容器,仓库

    • 镜像(Image):面向Docker的只读模版
    • 容器(Container):镜像的运行实例
    • 仓库(Registry):存储镜像的服务器
  5. Docker使用:以构建一个Nginx服务器为例。

    1. 拉取nginx官方镜像

      docker pull nginx
      
    2. 查看镜像是否安装成功

      docker images
      
    3. 创建www目录里面放一个index.html

      mkdir www
      echo 'hello docker' >> www/index.html
      
    4. 启动镜像:将www目录映射到nginx的项目位置,并将虚拟机的80端口映射到8080端口。

      命令解释

      • docker run: 启动容器
      • –name:容器名称
      • -d: 后台运行
      • -v:将宿主机目录或者文件挂在到容器中对应的目录或者文件

      nginx在docker容器中相关配置文件目录分别是

      • 日志位置:/var/log/nginx/
      • 配置文件位置:/etc/nginx/
      • 项目位置:/usr/share/nginx/html
      docker run -p 8080:80 -v $PWD/www:/usr/share/nginx/html -d nginx
      

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cILywBDV-1616579689091)(/Users/candice/Downloads/博客图片/Docker安装与使用/容器uuid.png)]

    从图片中可以看出来,执行命令之后,会打印出容器的uuid。说明nginx容器已经在后台运行了。然后到浏览器中输入http://127.0.0.1:8080,成功显示hello docker
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wb3tbNjf-1616579689092)(/Users/candice/Downloads/博客图片/Docker安装与使用/启动镜像成功.png)]

    1. 删除镜像

      docker rmi nginx
      
    2. 查看容器

      docker ps -a
      
    3. 停止容器

      docker stop e05
      
    4. 重新启动容器

      docker start e05
      
    5. 建一个伪终端,进入容器内部看看www是不是在/usr/share/nginx/html里面。

      docker exec -it e05 /bin/bash
      

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ImzIMjGG-1616579689093)(/Users/candice/Downloads/博客图片/Docker安装与使用/进入容器内部.png)]
    从图片中我们可以看出,执行完命令进入了容器内部并且确实在项目位置看见了index.html。

    1. 删除容器

      docker rm e05
      
  6. 定制镜像:以定制一个nodejs镜像为例。

    1. 拉取node镜像

      docker pull node
      
    2. 创建node-server目录并初始化一个项目。

      mkdir node-server
      cd node-server
      npm init -y
      
    3. 在node-server.js创建app.js

      const http = require('http');
      const server = http.createServer((req, res) => {
          res.end('hello nodeJS');
      });
      server.listen(3000, () => {
          console.log('3000 端口已启动!');
      })
      
    4. 创建Dockerfile。

      命令解释:

      FORM : 从XX镜像开始构建镜像

      COPY <源路径1> <源路径2>:将上下文目录中文件添加到容器里指定路径

      ADD <源路径1> <源路径2>: (同COPY)将上下文目录中文件添加到容器里指定路径

      WORKDIR:指定工作目录

      RUN npm install:执行npm install

      EXPOSE 3000: 暴露3000端口

      CMD:类似于RUN指令,用于运行程序

      CMD <shell 命令> 
      CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
      CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
      

      node在Docker容器中的目录位置:

      FORM node:latest
      ADD . /app/
      WORKDIR /app/
      RUN npm install
      EXPOSE 3000
      CMD ["node", "app.js"]
      
    5. 定制镜像

      docker build -t nodeserver .
      

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OWWbaw2t-1616579689094)(/Users/candice/Downloads/博客图片/Docker安装与使用/nodejs镜像定制成功.png)]
    6. 查看镜像定制情况

    docker run -p 3000:3000 nodeserver
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vN27QIp8-1616579689095)(/Users/candice/Downloads/博客图片/Docker安装与使用/服务器启动.png)]

    3000端口启动,浏览器输入http:127.0.0.1:3000,也成功的显示了hello nodeJS

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-smWRtPzX-1616579689095)(/Users/candice/Downloads/博客图片/Docker安装与使用/node服务器启动成功.png)]

    到这里我们一个nodejs的镜像也完成了。

docker-compose的使用

Docker-Compose是用于定义和运行多个容器Docker应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

docker安装完成就已经包含了docker-componse,可以在终端输入docker-compose --version查看docker-compose的版本。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k77JFPhC-1616579689096)(/Users/candice/Downloads/博客图片/Docker安装与使用/docker-compose版本.png)]

Compose使用的三个步骤:

  • 使用Dockerfile定义应用程序的环境
  • 使用docker-compose.yml定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行docker-compose up命令来启动并运行整个应用程序

那我们就动手实现一个compose吧!

  1. 首先创建compose-demo目录和Dockerfile文件,这一步你可以手动创建,也可以用命令创建。

    mkdir compose-demo && cd compose-demo
    touch Dockerfile
    
  2. nginx镜像的内容写入Dockerfile中。

    FROM nginx:latest
    RUN echo 'Hello docker' > /usr/share/nginx/html/index.html
    
  3. 创建docker-compose.yml文件

    touch docker-compose.yml
    
  4. docker-compose中创建两个容器一个是当前目录的Dockerfile创建的容器,还有一个是上文创建的nodeserver镜像。

    # yaml 配置
    version: '3'
    services:
      nginx:
        build: .
        ports:
         - "8080:80"
      node:
        image: "nodeserver"
        ports:
          - "3000:3000"
    
  5. 启动应用程序

    docker-compose up
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QDORZXkk-1616579689097)(/Users/candice/Downloads/博客图片/Docker安装与使用/docker-compose启动成功.png)]

看到上图信息就说明docker-compose启动成功了。

然后在浏览器分别输入http://127.0.0.1:8080http://127.0.0.1:3000。也成功了看见了相应的页面。

docker简单的使用到这里就结束了。想要了解进阶版的,敬请期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值