docker的日常使用

152 阅读3分钟

原因

作为一枚前端程序猿,之前很少使用docker,对其使用场景和原理知之甚少。这两天碰到部署一个公司node项目,算是 入了个门,过程也是遇到不少坑。这里总结给大家,帮助快速实战吧。

简单理解

容器:相当于一个微型的操作系统,里面可以部署各种应用 镜像:相当于系统的应用,也可以是自己的生成镜像(自己的项目)

安装

直接去官网下载吧www.docker.com/get-started ps:因为我的电脑是window10系统,在安装过程遇到需要升级wsl2,下个升级包 wslstorestorage.blob.core.windows.net/wslblob/wsl… 当然其他系统自行百度找这个升级包就好了

常见命令

装完之后就可以在命令行中进行操作,也可以界面可视化操作。这里主要列出我这几天用到吧。

  • docker ps 查看当前系统里正在运行容器
  • docker ps -a 查看所有容器,包含其他状态下容器
  • docker start xxx 这里xxx是容器id 重新运行已经停止的容器
  • docker stop xxx 暂停当前运行的容器
  • docker rm xxx 删除已经暂停的容器 前提是已经stop过的容器
  • docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    • OPTIONS 我常用有
      • --name xxx 给启动容器一个名称
      • -p xxx:yyy 主机(宿主)端口:容器端口
      • -it 在当前容器内开启一个交互模式命令窗口
    • IMAGE 这是可以是镜像id或者镜像名称

然后就是和镜像相关命令

  • docker images 查看镜像列表
  • docker pull xxx 这里xxx是镜像远程,它会从官方镜像库拉取,对于一些私有仓库镜像需要登录
  • docker login url 登录到私有镜像仓库地址
  • docker build -t repository:tag -f Dockerfile . 这里将当前目录下所有内容根据dockerfile配置文件,打包成一个执行名称的镜像
  • docker tag imageId 私域地址/项目/repository:tag 先将本机镜像给远程镜像打个tag
  • docker push 私域地址/项目/repository:tag 这里将本地镜像推到远程镜像仓库,取决于登录镜像仓库
  • docker export containerId -o xxxx.tar 这里需要注意是将一个容器导出成一个镜像
  • docker import xxx.tar repository:tag 这里指定导入镜像名称和版本号
  • docker logout 退出登录

docker-componse.yml

我们可以通过配置这个文件,集中管理docker服务

  • docker up 启动docker-componse配置所有服务
  • docker down 停止并删除所有服务
  • docker-compose -f ./docker-compose.yml up -d --force-recreate --no-deps xxx 启动其中一个服务 xxx 是你在配置文件中定义的服务名
  • docker-componse.ym 具体的配置项
version: "3"
services:
    mx-web-node: // 服务名称
        container_name: servicename  // 容器名称
        depends_on:
        #- platform
        - mx-service
        - mx-edms
        env_file: env.conf
        image: imagename:imagetag  // 配置容器启动依赖镜像  也可以通过 `build`属性来配置镜像
        #networks:
        #- mis
        ports:
          - 6001:6001 // 主机端口:容器端口
        restart: always
        command: ["/usr/local/bin/node", "/app/server.js"]  // 可以覆盖dockerfile中cmd启动命令
        volumes:   // 将容器内文件目录映射到主机里文件目录,方便实时更新内容
        - /home/ucmed/logs/mx-web-node:/app/logs

当然一个配置文件,可以配置多个服务

总结

上面大概就是目前我在项目中用到命令,还有许多命令可以指定各种参数实现不同效果,可以实际使用中,自行查询文档了。