docker
Docker
1
安装
- 参考:Linux环境搭建 - 飞书云文档 (feishu.cn)
- 密码:密码:j.N?-+4[
- (这个也是黑马视频对应的详细笔记)
- docker -v
- 检查是否安装好
- 版本: 24.0.7
 
- docker images
- 检查是否安装好且启动
 
镜像和容器
- 镜像:应用+应用所需的环境,配置,系统函数库
- 容器:docker运行时创建隔离环境,避免相互影响
- 镜像仓库:hub.docker.com
命令解读
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql
- docker run -d:创建并运行一个容器,- -d则是让容器以后台进程运行
- --name mysql: 给容器起个名字叫- mysql,你可以叫别的
- -p 3306:3306: 设置端口映射。- 容器是隔离环境,外界不可访问。但是可以将宿主机端口****映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
- 容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
- 格式: -p 宿主机端口:容器内端口,示例中就是将宿主机的3306映射到容器内的3306端口
 
- -e TZ=Asia/Shanghai: 配置容器内进程运行时的一些参数- 格式:-e KEY=VALUE,KEY和VALUE都由容器内进程决定
- 案例中,TZ=Asia/Shanghai是设置时区;MYSQL_ROOT_PASSWORD=123是设置MySQL默认密码
 
- 格式:
- mysql: 设置镜像名称,Docker会根据这个名字搜索并下载镜像- 格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是版本号
- 在未指定TAG的情况下,默认是最新版本,也就是mysql:latest
 
- 格式:
2
docker基础
常见命令
- docker exec -it nginx bash
- 连接已启动的nginx容器
 
- docker run -d --name nginx -p 80:80 nginx
- docker load -i jdk.tar


命令别名
# 修改/root/.bashrc文件
vi /root/.bashrc
内容如下:
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'
# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
#使命令生效
source /root/.bashrc
数据卷
- 
本来修改:需要进入容器,然后修改,且 
- 
问题:镜像只提供最小化的系统环境,提供当前应用对应镜像必备的系统函数,如什么vi,ll等操作都没有,无法在里面修改文件等 
- 
解决:挂载数据卷,直接在宿主机的对应文件上修改即可 
- 
数据卷:volume,虚拟目录,容器内目录与宿主机目录之间映射的桥梁 
- 
位置:/var/lib/docker/volumes 
- 
命令 - docker volume create 创建
- docker volume ls 查看
- docker volume rm 删除
- docker volume inspect 数据卷名 查看某个数据卷详情
- docker volume prune 清除数据卷
- docker run -v 数据卷:容器内目录 注意必须要在创建容器时!!(数据卷的名字可以自己取)
 
- 
docker inspect 容器名 - 查看容器详情,如数据卷挂载信息等
 
本地目录挂载
- 
容器会自动生成匿名卷 
- 
缺点:名称复杂,不好找,删容器后没同步 
- 
解决:挂载到本地目录下 
- 
-v 本地目录:容器内目录 
- 
(挂载时不知道文件位置都可以去hub.docker.com里查官方镜像文档 
镜像
- 结构:分层
- 一些基础部分可以复用
- 最底层:基础镜像
- 最顶层:入口
 
Dockerfile
- 
指令 说明 FROM 指定基础镜像 ENV 设置环境变量,可在后面指令使用 COPY 拷贝本地文件到镜像的指定目录 RUN 执行Linux的shell命令,一般是安装过程的命令 EXPOSE 指定容器运行时监听的端口,是给镜像使用者看的 ENTRYPOINT 镜像中应用的启动命令,容器运行时调用 
- 
docker build -t myImage:1.0 . - -t 表示给镜像取名
- myImage 镜像名
- . 指定dockerfile所在的目录,当前目录就为.
 
docker网络
- 问题:docker0分的ip地址,如果关掉再重启可能会变化
- 解决:自定义网络容器,可以通过容器名互联
| 命令 | 说明 | 
|---|---|
| docker network create | 创建一个网络 | 
| docker network ls | 查看所有网络 | 
| docker network rm | 删除指定网络 | 
| docker network prune | 清除未使用的网络 | 
| docker network connect | 使指定容器连接加入某网络 | 
| docker network disconnect | 使指定容器连接离开某网络 | 
| docker network inspect | 查看网络详细信息 | 
- 创建的时候加--network 网络容器名,可以在创建容器的时候连接,且不会再连接默认网桥
3
项目部署
- 
Maven中 package(跳过单元测试),然后将jar放到虚拟机中,构建镜像,创建并运行容器 
- 
容器名互联 记得要在一个网络! 
DockerCompose
- 
用一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。 
- 
(镜像和网络都能帮你创建!) 
version: "3.8"
services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - hm-net
  hmall:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: hmall
    ports:
      - "8080:8080"
    networks:
      - hm-net
    depends_on:
      - mysql
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "18080:18080"
      - "18081:18081"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - hmall
    networks:
      - hm-net
networks:
  hm-net:
    name: hmall
- 命令:docker compose [OPTIONS] [COMMAND]
- 表格里前俩是options
 
| 参数或指令 | 说明 | 
|---|---|
| -f | 指定compose文件的路径和名称 | 
| -p | 指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念 | 
| up | 创建并启动所有service容器 | 
| down | 停止并移除所有容器、网络 | 
| ps | 列出所有启动的容器 | 
| logs | 查看指定容器的日志 | 
| stop | 停止容器 | 
| start | 启动容器 | 
| restart | 重启容器 | 
| top | 查看运行的进程 | 
| exec | 在指定的运行中容器中执行命令 | 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号