Linux安装Docker,以及Docker的常用命令。docker的自定义镜像,最终使用推荐docker compose一件部署

Linux安装Docker,以及Docker的常用命令。docker的自定义镜像,最终使用推荐docker compose一件部署

一、Docker 定义

  • 快速构建、运行、管理应用的工具

二、Linux安装Docker

1、首先要清除旧版Docker

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine \
    docker-selinux 

2、centos7配置源问题解决

  • mirrorlist注释,开启baseurl

  • 由于centos7在24年六月停更新版本了,所以把baseurl里的mirror改成vault

    vi /etc/yum.repos.d/CentOS-Base.repo
    
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
    baseurl=http://vault.centos.org/centos/$releasever/centosplus/$basearch
    

3、配置Docker的yum库

  1. 首先要安装一个yum工具

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
  2. 配置Docker的yum源

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
    
  3. 更新yum,建立缓存

    sudo yum makecache fast
    

4、安装Docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

5、docker启动和校验

# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

# 查看版本号
docker -v

# 列出所有本地镜像
docker images

6、配置镜像加速(免费的)

  1. 首先访问阿里云网站:https://www.aliyun.com/,(可能不生效,换网上其他可用源)

  2. 开通镜像服务:在首页的产品中,找到阿里云的容器镜像服务,点击后进入控制台

  3. 配置镜像加速:找到镜像工具下的镜像加速器,页面向下滚动,即可找到配置的文档说明。

    # 创建目录
    mkdir -p /etc/docker
    
    # 复制内容,注意把其中的镜像加速地址改成你自己的
    tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
    }
    EOF
    
    # 重新加载配置
    systemctl daemon-reload
    
    # 重启Docker
    systemctl restart docker
    

三、常用部署

1、部署原理

  • 当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(container)
    来源黑马程序员

2、部署MySQL

docker run -d \               #docker run 安装并运行    -d容器在后台运行
  --name mysql \              #给容器起名字,名字必须唯一
  -p 3306:3306 \    #主机端口:容器端口端口映射,每个容器都是隔离的状态,内部有自己的所有配置,甚至有端口号,所以需要将内部端口映射到安装主机的端口。
  -e TZ=Asia/Shanghai \	  	  #-e key=value 设置环境变量
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql					      #运行的镜像的名字,命名规范:镜像名称:版本号,版本号不写默认最新。

四、docker基础

  • 补充说明1:容器开机自启

    # Docker容器开机自启 容器名或者容器id,任选其一
    docker update --restart=always [容器名/容器id]
    
  • 补充说明2:长命令可以起别名

    # 修改/root/.bashrc文件
    vi /root/.bashrc
    
    alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
    alias dis='docker images'
    
    # 执行命令使别名生效
    source /root/.bashrc
    

1、常见命令

命令说明
docker pull镜像仓库拉取容器镜像本地仓库
docker push本地仓库推送容器镜像镜像仓库
docker images查看本地镜像仓库存储的容器镜像
docker rmi删除镜像
docker run安装并运行容器
docker stop停止容器
docker start启动容器
docke restart重启容器
docker rm删除容器
docker ps查看docker运行的容器
docker logs查看容器日志
docker exec进入容器
docker save打包镜像
docke load加载镜像
docker inspect查看容器配置信息
  • 图像理解:
    来源黑马程序员截图

2、数据卷操作命令

命令说明
docker volume create创建数据卷
docker volume ls查看数据卷
docker volume rm删除指定数据卷
docker volume inspect查看指定数据卷的信息
docker volume prune删除所有状态不在使用的数据卷

3、挂载

  • 作用:完成挂载,可以将主机上的一个文件目录和容器里的某个目录双向绑定,可以方便操作文件。
3.1、数据卷挂载
  • 数据卷挂载是在容器创建时进行操作,用 -v 数据卷名:挂载容器目录地址

    # 1.首先创建容器并指定数据卷,注意通过 -v 参数来指定数据卷
    docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
    
3.2、本地目录挂载
  • 本地目录挂载是在容器创建时进行操作,用 -v 本地目录:挂载容器目录地址

  • 本地目录一定要"/"或者"./"开头,否则会被识别成数据卷挂载

    # 1.进入root目录
    cd ~
    
    # 2.创建并运行新mysql容器,挂载本地目录
    docker run -d \
      --name mysql \
      -p 3306:3306 \
      -e TZ=Asia/Shanghai \
      -e MYSQL_ROOT_PASSWORD=123 \
      -v ./mysql/data:/var/lib/mysql \
      -v ./mysql/conf:/etc/mysql/conf.d \
      -v ./mysql/init:/docker-entrypoint-initdb.d \
      mysql
    

五、自定义镜像

  • 定义:镜像分为入口基础镜像
  • 入口:镜像运行入口,一般是程序启动的脚本和参数,java -jar xx.jar
  • 层:添加安装包、依赖、配置等,每次操作都形成新的一层。
  • 基础镜像:应用依赖的系统函数库、环境、配置、文件等。

1、Dockerfile文件

  • 定义:Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像。
指令说明
FROM指定基础镜像
ENV设置环境变量,可在后面指令使用
COPY拷贝本地文件到镜像的指定目录
RUN执行Linux的shell命令,一般是安装过程的命令
EXPOSE指定容器运行时监听的端口,是给镜像使用者看的
ENTRYPOINT镜像中应用的启动命令,容器运行时调用
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录、容器内时区
ENV JAVA_DIR=/usr/local
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 安装JDK
RUN cd $JAVA_DIR \ && tar -xf ./jdk8.tar.gz \ && mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]

2、上传jar包,快捷使用方式

  1. Dockerfile文件指定一个基础镜像,只需要上传jar包,编写入口即可。

    # 基础镜像
    FROM openjdk:11.0-jre-buster
    # 拷贝jar包
    COPY docker-demo.jar /app.jar
    # 入口
    ENTRYPOINT ["java", "-jar", "/app.jar"]
    
  2. 构建镜像docker build

    docker build -t myImage:1.0 .
    #-t 给镜像起名称   镜像名:版本号  不写版本号默认latest
    #“.”  点是Dockerfile所在目录,当前目录就是“.”
    

六、网络容器互联

1、可以解决以下问题

  • 容器的网络IP其实是一个虚拟的IP,其值并不固定与某一个容器绑定,如果我们在开发时写死某个IP,而在部署时很可能MySQL容器的IP会发生变化,连接会失败。
  • 自定义的网络可以实现访问容器名就可以访问到对应地址,不需要指定网络,只有自定义网络才可以通过容器名互相访问
  • 在自定义网络中,可以给容器起多个别名,默认的别名是容器名本身
  • 在同一个自定义网络中的容器,可以通过别名互相访问

2、常见命令

命令说明
docker network create创建一个自定义网络
docker network ls查看所有网络
docker network rm删除某个网络
docker network prune删除所有网络
docker network connect指定某一个容器连接到网络
docker network disconnect指定某一个容器离开网络
docker network inspect查看网络详细信息

示例:

# 1.首先通过命令创建一个网络
docker network create hmall

# 2.然后查看网络
docker network ls
# 结果:
NETWORK ID     NAME      DRIVER    SCOPE
639bc44d0a87   bridge    bridge    local
403f16ec62a2   hmall     bridge    local
0dc0f72a0fbb   host      host      local
cd8d3e8df47b   none      null      local
# 其中,除了hmall以外,其它都是默认的网络

# 3.让dd和mysql都加入该网络,注意,在加入网络时可以通过--alias给容器起别名
# 这样该网络内的其它容器可以用别名互相访问!
# 3.1.mysql容器,指定别名为db,另外每一个容器都有一个别名是容器名
docker network connect hmall mysql --alias db
# 3.2.db容器,也就是我们的java项目
docker network connect hmall dd

# 4.进入dd容器,尝试利用别名访问db
# 4.1.进入容器
docker exec -it dd bash
# 4.2.用db别名访问
ping db
# 结果
PING db (172.18.0.2) 56(84) bytes of data.
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=2 ttl=64 time=0.056 ms
# 4.3.用容器名访问
ping mysql
# 结果:
PING mysql (172.18.0.2) 56(84) bytes of data.
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=1 ttl=64 time=0.044 ms
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=2 ttl=64 time=0.054 ms
docker run -d --name nginx \-p 18080:18080 \
	-p 18081:18081 \
	-v /root/nginx/html:/usr/share/nginx/html \
	-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
	--network heima \
	nginx

七、docker Compoes

1、doker-compose.yaml文件


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
  • version:docker Compoes版本号
  • services:容器组件
    • mysql:容器名称
    • image:镜像
    • container_name:容器别名
    • ports:端口映射
    • environment:环境变量参数
      • TZ:数据库时区
      • MYSQL_ROOT_PASSWORD:数据库密码
    • volumes:文件夹或者配置文件挂载
    • networks:添加到哪个自定义网络字段下
    • build:自定义镜像
      • context:docker文件以及上传资源所在目录
      • dockerfile:dockerfile文件名
    • depends_on:容器依赖,就是要给谁发送请求的容器
  • networks:自定义网络
    • hm-net:自定义网络名称
      • name:网络别名

2、运行命令

类型参数或指令说明
Options-f指定compose文件的路径和名称
(如果在当前包下可以省略)
-p指定project名称。project就是
当前compose文件中设置的多个service的集合,是逻辑概念
Commandsup创建并启动所有service容器
down停止并移除所有容器、网络
ps列出所有启动的容器
logs查看指定容器的日志
stop停止容器
start启动容器
restart重启容器
top查看运行的进程
exec在指定的运行中容器中执行命令
# 5.启动所有, -d 参数是后台启动
docker compose up -d

此文章是根据黑马程序员spring cloud课程所学,这是根据我自己的理解,提炼出的笔记。文章没有过多的解释,命令是可以直接执行的。Linux版本为centos7最小安装包CentOS-7-x86_64-Minimal-2009.iso,视频出处哔哩哔哩黑马程序员Spring Cloud

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值