前端 Coder 手中的 Docker

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介: 前端 Coder 手中的 Docker

前端 Coder 手中的 Docker


✨博主介绍

在服务器中安装 Docker

修改镜像

镜像常用命令

容器常用命令

容器间通信

Dockerfile

FROM 命令

RUN 命令

EXPOSE 命令

CMD 命令

WORKDIR 命令

ENV 命令

ADD 命令

COPY 命令

VOLUME 命令

ENTRYPOINT 命令

docker-compose

Linux 系统安装与卸载

Linux 手动下载

macos、windows

卸载

文件基本格式

常用命令

命令选项

命令使用说明

💫点击直接资料领取💫


✨博主介绍


🌊 作者主页:苏州程序大白

🌊 作者简介:🏆CSDN人工智能域优质创作者🥇,苏州市凯捷智能科技有限公司创始之一,目前合作公司富士康、歌尔等几家新能源公司


💬如果文章对你有帮助,欢迎关注、点赞、收藏


💅 有任何问题欢迎私信,看到会及时回复

💅关注苏州程序大白,分享粉丝福利


34f82197984f46e3b6fde2f681dae792.png


在服务器中安装 Docker


93fb1c76a6ce49b8a07f643b1a83840d.png


在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装,另外可以通过 --mirror 选项使用国内源进行安装:执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker 的稳定 (stable) 版本安装在系统中。


curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun


安装完成后的推荐操作


启动 docker


sudo systemctl enable docker
sudo systemctl start docker


创建 docker 用户组


sudo groupadd docker


将当前用户加入 docker 组


sudo usermod -aG docker $USER


测试 docker 安装是否正确


docker run hello-world


修改镜像


1、登录阿里容器镜像服务


2、查看加速地址


6ca525aed40347fb9cf8c3cb51e11021.png


3、设置加速服务


创建目录


sudo mkdir -p /etc/docker


创建文件并写入内容


sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://lz2nib3q.mirror.aliyuncs.com"]
}
EOF


重新加载及重启 Docker 服务


sudo systemctl daemon-reload
sudo systemctl restart docker


4、查看镜像地址


docker info


镜像常用命令


查看本机中所有镜像


命令 docker images [镜像名] 可查看当前镜像。


选型:
-q
只显示镜像 id
-a
列出所有镜像(包含中间映像层)


搜索镜像


命令格式:docker search [options] 镜像名


选型:


选型:
-s
列出收藏数不少于指定值的镜像
--no-trunc
显示完整的镜像信息


从仓库下载镜像


选型:
命令格式:docker pull 镜像名[:TAG|@DIGEST]


参数:
可以指定 TAG 或者 DIGEST
TAG
标签名
DIGES


删除镜像


命令格式:docker rmi 镜像名


选型:
可以指定 TAG 或者 DIGEST
-f
强制删除


容器常用命令


运行容器


镜像名新建并启动容器
命令格式:docker run [选项] 镜像名


选型


选型:
--name
别名为容器起一个名字
-d
启动守护式容器(在后台启动容器)
-p
映射端口号:原始端口号 指定端口号启动
--network
指定使用的网桥


docker run -it --name myTomcat -p 8888:8080 tomcat
docker run -d --name myTomcat -P tomcat


查看运行的容器


列出所有正在运行的容器,命令格式:docker ps


选型:
-a
正在运行的和历史运行过的容器
-q
静默模式,只显示容器编号


停止 | 关闭 | 重启容器


开启容器
docker start 容器名字或者容器id
重启容器
docker restart 容器名或者容器id
正常停止容器运行
docker stop 容器名或者容器id
立即停止容器运行
 docker kill 容器名或者容器id


删除容器


删除单个容器
docker rm -f 容器id和容器名
删除所有容器
docker rm -f $(docker ps -aq)


查看容器内进程


docker top 容器id或者容器名


查看容器内部细节


docker inspect 容器id


查看容器运行日志


命令格式:docker logs [OPTIONS] 容器id或容器名


选型:
-t
加入时间戳
-f
跟随最新的日志打印
--tail
数字 显示最后多少条


进入容器内部


命令格式:docker exec [options] 容器id 容器内命令


选型:
-i
以交互模式运行容器,通常与 - t 一起使用
-t
分配一个伪终端 shell 窗口 bash


容器和宿主机之间复制文件


将宿主机复制到容器内部
docker cp 文件|目录 容器id:容器路径
将容器内资源拷贝到主机上
docker cp 容器id:容器内资源路径 宿主机目录路径


数据卷(volum)实现与宿主机共享目录


命令:docker run -v 宿主机的路径|任意别名:/容器内的路径 镜像名,宿主机与容器文件是互通的。
docker run -v 宿主机的路径|任意别名:/容器内的路径:ro 镜像名,容器机不能修改宿主机的文件内容。


注意:如果是宿主机路径必须是绝对路径,宿主机目录会覆盖容器内目录内容如果是别名则会在 docker 运行容器时自动在宿主机中创建一个目录,并将容器目录文件复制到宿主机中


打包镜像


命令:docker save 镜像名:tag -o 名称.tar


载入镜像


命令:docker load -i 名称.tar


容器打包成新的镜像


命令:docker commit -m "描述信息" -a "作者信息" (容器id或者名称)打包的镜像名称:标签


容器间通信


当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。


同时,Docker 随机分配一个本地未占用的私有网段(在 RFC1918 中定义)中的一个地址给 docker0 接口。比如典型的 172.17.42.1,掩码为 255.255.0.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。


当创建一个 Docker 容器的时候,同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头(例如 vethAQI2QT)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。


f79d30bc458c4455aefd78a55f50fef4.png


网桥


查看默认网桥
docker network ls
创建网桥
docker network create name
删除网桥
docker network rm name
删除没有使用的网桥
docker network prune


Dockerfile


Dockerfile 可以认为是 Docker 镜像的描述文件,是由一系列命令和参数构成的脚本。主要作用是用来构建 docker 镜像的构建文件。


4bede07ff5a54b87a23d7b6d3f8cb554.png


通过架构图可以看出通过 DockerFile 可以直接构建镜像


c0b9a4d924a14a988783a3600eb0b224.png


保留字 作用

FROM 当前镜像是基于哪个镜像的 第一个指令必须是FROM

RUN 构建镜像时需要运行的指令

EXPOSE 当前容器对外暴露出的端口号

WORKDIR 指定在创建容器后,终端默认登录进来的工作目录,一个落脚点

ENV 用来在构建镜像过程中设置环境变量

ADD 将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL 和解压 tar 包

COPY 类似于 ADD,拷贝文件和目录到镜像中将从构建上下文目录中 <原路径> 的文件 / 目录复制到新的一层的镜像内的 < 目标路径 > 位置

VOLUME 容器数据卷,用于数据保存和持久化工作

CMD 指定一个容器启动时要运行的命令Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换

ENTRYPOINT 指定一个容器启动时要运行的命令

ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及其参数


FROM 命令


基于那个镜像进行构建新的镜像,在构建时会自动从 docker hub 拉取 base 镜像 必须作为 Dockerfile 的第一个指令出现


语法:


FROM  <image>
FROM  <image>[:<tag>]     使用版本不写为latest
FROM  <image>[@<digest>]  使用摘要


RUN 命令


RUN 指令将在当前映像之上的新层中执行任何命令并提交结果。生成的提交映像将用于 Dockerfile 中的下一步


语法:


RUN <command> (shell form, the command is run in a shell, which by default is /bin/sh -c on Linux or cmd /S /C on Windows)
RUN echo hello
RUN ["executable", "param1", "param2"] (exec form)
RUN ["/bin/bash", "-c", "echo hello"]


EXPOSE 命令


用来指定构建的镜像在运行为容器时对外暴露的端口


语法:


EXPOSE 80/tcp  如果没有显示指定则默认暴露都是tcp
EXPOSE 80/udp


CMD 命令


用来为启动的容器指定执行的命令,在 Dockerfile 中只能有一条 CMD 指令。如果列出多个命令,则只有最后一个命令才会生效。


注意: Dockerfile 中只能有一条 CMD 指令。如果列出多个命令,则只有最后一个命令才会生效。


语法:


EXPOSE 80/tcp  如果没有显示指定则默认暴露都是tcp
EXPOSE 80/udp


WORKDIR 命令


用来为 Dockerfile 中的任何 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令设置工作目录。如果 WORKDIR 不存在,即使它没有在任何后续 Dockerfile 指令中使用,它也将被创建。


语法:


WORKDIR /path/to/workdir
WORKDIR /a
WORKDIR b
WORKDIR c
注意:WORKDIR指令可以在Dockerfile中多次使用。如果提供了相对路径,则该路径将与先前WORKDIR指令的路径相对


ENV 命令


用来为构建镜像设置环境变量。这个值将出现在构建阶段中所有后续指令的环境中。


语法:


ENV <key> <value>
ENV <key>=<value> ...


ADD 命令


用来从 context 上下文复制新文件、目录或远程文件 url,并将它们添加到位于指定路径的映像文件系统中。


语法:


ADD hom* /mydir/       通配符添加多个文件
ADD hom?.txt /mydir/   通配符添加
ADD test.txt relativeDir/  可以指定相对路径
ADD test.txt /absoluteDir/ 也可以指定绝对路径
ADD url 


COPY 命令


用来将 context 目录中指定文件复制到镜像的指定目录中


语法:


COPY src dest
COPY ["<src>",... "<dest>"]


VOLUME 命令


用来定义容器运行时可以挂在到宿主机的目录


语法:


VOLUME ["/data"]
VOLUME /data


ENTRYPOINT 命令


用来指定容器启动时执行命令和 CMD 类似


语法:


  ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2


ENTRYPOINT 指令,往往用于设置容器启动后的第一个命令,这对一个容器来说往往是固定的。

CMD 指令,往往用于设置容器启动的第一个命令的默认参数,这对一个容器来说可以是变化的。


docker-compose


Linux 系统安装与卸载


在 Linux 上的也安装十分简单,从 官方 GitHub Release 处直接下载编译好的二进制文件即可。例如,在 Linux 64 位系统上直接下载对应的二进制包。


sudo curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose


Linux 手动下载


1、进入 GitHub 下载


2、将文件上传到服务器(Linux 机器)


3、将文件放入 /usr/local/bin/ 目录,并改名为 docker-compose


mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose


4、为其赋予可执行权限


sudo chmod +x /usr/local/bin/docker-compose


macos、windows


Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker 容器中运行。Docker Desktop for Mac/Windows 自带 docker-compose 二进制文件,安装 Docker 之后可以直接使用。


卸载


sudo rm /usr/local/bin/docker-compose


文件基本格式


version: "3.2" # 官方网址 https://docs.docker.com/compose/compose-file/
services:
  tomcat01: #服务名称(id)
    container_name: tomcat01 # 相当于run 的 --name
    image: tomcat:8.0-jre8 #使用哪个镜像  相当于run image
    ports:  #用来完成host与容器的端口映射关系  相当于run -p
      - "8080:8080"
    volumes: #完成宿主机与容器中目录数据卷共享  相当于run -v
      #- /root/apps:/usr/local/tomcat/webapps #使用自定义路径映射
      - tomcatwebapps01:/usr/local/tomcat/webapps
    networks: #代表当前服务使用哪个网络桥     相当于run --networ
      - hello
  tomcat02: #服务名称
    container_name: tomcat02
    image: tomcat:8.0-jre8 #使用哪个镜像
    ports:  #用来完成host与容器的端口映射关系
      - "8081:8080"
    volumes: #完成宿主机与容器中目录数据卷共享
      #- /root/apps:/usr/local/tomcat/webapps #使用自定义路径映射
      - tomcatwebapps02:/usr/local/tomcat/webapps
    networks: #代表当前服务使用哪个网络桥
      - hello
  mysql:
    image: mysql:5.7.32
    container_name: mysql
    ports:
      - "3307:3306"
    volumes:
      - mysqldata:/var/lib/mysql
      - mysqlconf:/etc/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
    networks:
      - hello
  redis:
    image: redis:5.0.10
    container_name: redis
    ports:
      - "6379:6379"
    volumes:
      - redisdata:/data
    networks:
      - hello
    command: "redis-server --appendonly yes" #run 镜像之后用来覆盖容器内容默认命令
volumes:  #声明上面服务所使用的自动创建的卷名
  tomcatwebapps01: #声明指令的卷名  compose自动创建该卷名但是会在之前加入项目名
    external:    #使用自定义卷名
      false       #true确定使用指定卷名  注意:一旦使用外部自定义卷名启动服务之前必须手动创建
  tomcatwebapps02:
  mysqldata:
  mysqlconf:
  redisdata:
networks: #定义服务用到桥
  hello: #定义上面的服务用到的网桥名称 默认创建就是 bridge
    external:
      true   #使用外部指定网桥  注意:网桥必须存在


常用命令


对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。


执行 docker-compose [COMMAND] --help 或者 docker-compose help [COMMAND] 可以查看具体某个命令的使用格式。


docker-compose 命令的基本的使用格式是


docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]


命令选项


-f, --file FILE
指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
-p, --project-name NAME
指定项目名称,默认将使用所在目录名称作为项目名。


网络特性:


--x-networking
使用 Docker 的可拔插网络后端特性
--x-network-driver DRIVER
指定网络后端的驱动,默认为 bridge


日志输出:


--verbose
输出更多调试信息。
-v, --version
打印版本并退出。


命令使用说明


up

格式为 docker-compose up [options] [SERVICE...]。


该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。链接的服务都将会被自动启动,除非已经处于运行状态。可以说,大部分时候都可以直接通过该命令来启动一个项目。


默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。当通过 Ctrl-C 停止命令时,所有容器将会停止。

默认情况,如果服务容器已经存在,docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容

如果使用 docker-compose up -d,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。


down
此命令将会停止 up 命令所启动的容器,并移除网络
 exec
进入指定的容器。
 ps
格式为 docker-compose ps [options] [SERVICE...]。
列出项目中目前的所有容器。-q 可以只打印容器的 id 信息
 restart
格式为 docker-compose restart [options] [SERVICE...]。
重启项目中的服务。
选项:
-t, --timeout TIMEOUT 指定重启前停止容器的超时(默认为 10 秒)。
 rm
格式为 docker-compose rm [options] [SERVICE...]。
删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。
选项:
-f, --force 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。
-v 删除容器所挂载的数据卷。
 start
格式为 docker-compose start [SERVICE...]。
启动已经存在的服务容器。
 stop
格式为 docker-compose stop [options] [SERVICE...]。
停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。
选项:
-t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
 top
查看各个服务容器内运行的进程。
 pause
格式为 docker-compose pause [SERVICE...]。
暂停服务
 unpause
格式为 docker-compose unpause [SERVICE...]。
恢复处于暂停状态中的服务。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
资源调度 前端开发 Shell
[docker] DevContainer高效开发(第二篇):前端开发体验
上面的配置只是最基本的配置,大部分情况我们是需要自定义配置,让容器更符合我们的需求。自定义配置就需要用到 Dockerfile,这个文件是 docker 的配置文件,可以在里面安装软件,配置环境等等。Dockerfile 的语法可以参考 官方文档。然后根据自己的需求编写 Dockerfile# 设置变量,由 .devcontainer.json 中的 args 传入# 指定 node 版本# 设置编码# 设置工作目录# 挂载 volume# 设置 bash 为默认 shell。
173 0
|
6月前
|
前端开发 jenkins 持续交付
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
172 1
|
6月前
|
前端开发 应用服务中间件 nginx
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
605 0
|
1月前
|
前端开发 开发工具 git
如何清理 docker 磁盘空间+修改 Gitea 服务器的 Webhook 设置+前端一些好学好用的代码规范-git hook+husky + commitlint
如何清理 docker 磁盘空间+修改 Gitea 服务器的 Webhook 设置+前端一些好学好用的代码规范-git hook+husky + commitlint
34 5
|
2月前
|
前端开发 应用服务中间件 nginx
docker部署本地前端项目思路
docker部署本地前端项目思路
40 7
|
1月前
|
JavaScript 前端开发 Docker
拿下奇怪的前端报错(二):nvm不可用报错`GLIBC_2.27‘‘GLIBCXX_3.4.20‘not Found?+ 使用docker构建多个前端项目实践
本文介绍了在多版本Node.js环境中使用nvm进行版本管理和遇到的问题,以及通过Docker化构建流程来解决兼容性问题的方法。文中详细描述了构建Docker镜像、启动临时容器复制构建产物的具体步骤,有效解决了不同项目对Node.js版本的不同需求。
|
4月前
|
前端开发 Docker 容器
前端 CSS 经典:mac docker 效果
前端 CSS 经典:mac docker 效果
51 0
|
6月前
|
前端开发 应用服务中间件 nginx
前端破圈使用Docker Nginx容器部署项目🏴‍☠️
前端破圈使用Docker Nginx容器部署项目🏴‍☠️
232 0
|
6月前
|
前端开发 Java 网络安全
解决docker中运行的jar包连不上前端程序
解决docker中运行的jar包连不上前端程序
|
6月前
|
前端开发 应用服务中间件 nginx
Docker 安装 Nginx 部署前端项目
Docker 安装 Nginx 部署前端项目
673 1
下一篇
无影云桌面