Docker基础笔记

Docker基础笔记

1.概述

Docker是一个虚拟化的平台,可以通过虚拟化的方式,为应用提供可运行的容器。基于这种方式可以快速打包、测试、部署应用程序。

docker核心对象

镜像(image) :docker镜像是一个特殊的文件系统,可以打包应用的运行环境与应用程序,通过docker启动镜像可以将应用程序在一个容器中启动起来。

docker镜像是高度精简的,镜像中的操作系统不包含内核,容器都是共享宿主机(如centos)的内核。

容器(container):容器可以理解为运行镜像的一个载体,基于镜像创建、启动,运行镜像中的文件。当一个程序通过docker发布、部署成功并运行后,那么这个应用就叫做容器化应用。

架构图

在这里插入图片描述

架构图说明:

  • Docker Host是我们的docker宿主机(就是安装了docker的操作系统)
  • Registry是docker拉取镜像的远程仓库,提供大量的镜像供下载,下载完成之后保存在Images中
  • Docker Daemon是docker的服务线程,处理Docker客户端命令。
  • Images 是Docker本地的镜像仓库,可以通过docker images查看镜像文件。

docker运行机制

docker pull
1)客户端将指令发送给docker daemon
2)docker daemon 先检查本地images中有没有相关的镜像
3)如果本地没有相关的镜像,则向镜像服务器请求,将远程镜像下载到本地
docker run
1) 检查本地是否存在指定的镜像,不存在就从公有仓库下载
2) 利用镜像创建并启动一个容器
3) 分配一个文件系(简版linux系统),并在只读的镜像层外面挂载一层可读写层
4) 从宿主机配置的网桥接口中桥接一个虚拟接口到容器中去
5) 从地址池配置一个 ip 地址给容器
6) 执行用户指定的应用程序
2.安装

本地安装

  1. 下载离线docker安装包

    https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz

  2. 下载离线安装工具(docker.bash,install.sh)

    https://github.com/Jrohy/docker-install/

  3. 将下载好的资源放在一个目录下,导入linux目录下

    /root/setup/docker

  4. 执行安装操作

    # 进入/root/setup/docker 文件夹
    cd /root/setup/docker
    
    # 为 install.sh添加执行权限
    chmod +x install.sh
    
    # 安装
    ./install.sh -f docker-20.10.6.tgz
    
    
  5. 检查安装

    docker info

在线安装

  1. 安装一组yum工具

    sudo yum install -y yum-utils

  2. 设置yum的仓库地址

     sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    
    sudo yum-config-manager \
         --add-repo \
         http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    
  3. 更新yum缓存

    sudo yum makecache fast #yum 是包管理器
    
  4. 安装最新版的docker

    sudo yum install -y docker-ce docker-ce-cli containerd.io
    
3.Docker基本操作

Docker基本操作

#启动docker
systemctl start docker
#查看docker状态
systemctl status docker
#设置开机自启
systemctl enable docker
#禁用开机自启
systemctl disable docker
#重新启动docker
systemctl restart docker
#查看docker信息
docker info
docker indo | grep "Docker Root Dir" #查询部分信息
#停止docker服务
systemctl stop docker

设置Docker镜像加速

cat <<EOF > /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    },
  "data-root": "/var/lib/docker"
}
EOF

加速设置完成后重启docker,systemctl restart docker

4.Docker镜像操作
#下载镜像
docker pull hello-world
#浏览镜像文件
docker images
#查看镜像详情
docker inspect hello-world
#查看镜像历史
docker history hello-world
#导出镜像文件
docker save hello-world | gzip > hello-world.tar.gz
#删除镜像文件
docker image rm hello-world
#导入镜像文件
docker load < hello-world.tar.gz
#运行镜像文件
docker run hello-world
5.Docker容器操作
#下载镜像
docker pull centos:7
#查看镜像
docker images
#创建并启动容器,(-i表示交互式操作, -t 表示终端),bash 表示进入操作终端,基于交互式进行相关操作
docker run -it centos:7 bash
#退出
exit
#查看所有的容器
docker ps -a
#查看正在运行的容器
docker ps
#查看容器的日志
docker container logs 214
#停止或重启容器
docker container stop 214
docker container restart 214
#进入指定容器,214为容器id前三位(容器未运行不可进入)
docker exec -it 214 bash
#删除容器
docker container rm 214
#强制删除运行中的容器
docker container rm -f 214
#清除所有处于终止的状态容器(谨慎使用)
docker container prune
6.Docker数据管理操作

数据卷(volumes):数据卷是一个可以供一个或多个容器使用的特殊目录,可以在容器之间共享和重用,默认会一致存在。

#创建数据卷
docker volume create container-vol
#查看所有数据卷
docker volume ls
#查看指定数据卷的信息
docker volume inspect container-vol
#启动挂载数据卷的容器
docker run -it -v container-vol:/root centos:7 bash #把数据卷挂载到容器的root目录
#删除数据卷
docker volume rm container-vol
#清除无主数据卷
docker volume prune

挂载主机目录(bind mounts):可以直接使容器目录与挂载主机目录,相互绑定共享资源。

#启动挂载容器
docker run it -v /usr/app:/opt/app centos:7 bash
#查看挂载目录信息
docker inspect 91a  #91a为容器的id
7.Dockerfile与镜像制作

制作JDK镜像

准备工作

  1. centos:7 镜像
  2. jdk压缩包: jdk-8u51-linux-x64.tar.gz
  3. 将jdk压缩包放在/root/setup/jdk/目录下

创建Dockerfile文件

  1. 进入jdk压缩包所在目录,创建并编辑文件Dockerfile

    vim Dockerfile
    #按i进行编辑,编辑完毕esc,然后:wq保存退出
    #文件内容
    FROM centos:7
    ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
    ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
        PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
    CMD ['bash']
    
  2. 创建jdk镜像文件

    在Dockerfile所在目录执行docker build命令

    docker build -t jdk:8 . #不要丢掉这里的点,-t表示镜像标识(镜像名),是tag单词的缩写.
    
  3. 运行JDK镜像文件

    docker run -it jdk:8 bash
    

    进入容器之后,echo $PATH查看环境变量,java -version查看JDK版本

  4. 基于jdk运行sentinel启动

    • 将sentinel拷贝到/root/servers/目录中

    • 基于jdk:8镜像启动运行sentinel服务(服务启动后可在宿主机通过localhost:8180进行访问

    • docker run -d -p 8180:8080 --name sentinel \
      -v /root/servers:/usr/sca \
      jdk:8 java -jar /usr/sca/sentinel-dashboard-1.8.1.jar
      

制作Sentinel镜像

准备工作:

  1. centos:7

  2. jdk8压缩包, jdk-8u51-linux-x64.tar.gz

  3. sentinel-dashboard-1.8.0.jar

    jdk8与sentinel-dashboard-1.8.0.jar放在/root/setup/sentinel/目录

构建sentinel镜像

  1. 在jdk8中添加Dockerfile文件,编辑

    FROM centos:7
    ADD jdk-8u51-linux-x64.tar.gz  /usr/local/
    ADD sentinel-dashboard-1.8.1.jar  /usr/local/
    ENV JAVA_HOME=/usr/local/jdk1.8.0_51 \
        PATH=/usr/local/jdk1.8.0_51/bin:$PATH
    EXPOSE 8080
    ENTRYPOINT ["java","-jar","/usr/local/sentinel-dashboard-1.8.1.jar"]
    

    EXPOSE表示对外暴露的服务端口,ENTRYPOINT中写的是你容器启动时候要执行的指令

  2. 使用Dockerfile构建镜像

    docker build -t sentinel:8 . #不要丢掉小点
    
  3. 后台运行sentinel容器

    docker run -d --name sentinel8181 -p 8181:8080 sentinel:8 #-d 表示后台运行,-p用于指定端口映射,sentinel:8为镜像文件名
    
  4. 查看sentinel容器

    docker ps
    
  5. 访问sentinel服务

    在window系统中访问Linux系统的sentinel服务:192.168.126.128:8181/#/login

8.Docker镜像安装

安装mysql数据库

  1. 拉取指定版本mysql

    docker pull mysql:8.0.23
    
  2. 检查mysql镜像docker images

  3. 启动运行mysql

    sudo docker run -p 3306:3306 --name mysql \
    -v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
    -v /usr/local/docker/mysql/conf:/etc/mysql \
    -v /usr/local/docker/mysql/logs:/var/log/mysql \
    -v /usr/local/docker/mysql/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    -d mysql:8.0.23
    
  4. 登录mysql数据库

    #进入容器
    sudo docker exec -it mysql bash
    #登录mysql
    mysql -uroot -p
    
  5. 停止启动mysql

    #停止mysql服务
    docker stop mysql
    #启动mysql服务
    docker start mysql
    #设置mysql开机自启动,docker启动mysql也启动
    docker update mysql --restart=always
    

安装Redis数据库

  1. 下载镜像文件

    docker pull redis
    
  2. 准备配置文件,启动redis

    #创建Redis配置文件目录
    mkdir -p /usr/local/docker/redis01/conf
    #创建文件redis.config
    touch /usr/local/docker/redis01/conf/redis.conf
    #创建Redis实例并启动
    sudo docker run -p 6379:6379 --name redis01 \
    -v /usr/local/docker/redis01/data:/data \
    -v /usr/local/docker/redis01/conf/redis.conf:/etc/redis/redis.conf \
    -d redis redis-server /etc/redis/redis.conf 
    #查看正在运行的进程
    docker ps
    
  3. 访问redis服务器

    #进入redis
    docker exec -it redis01 bash
    #检查redis版本
    redis-server -v
    redis-cli -v
    #登录redis 默认不需要密码
    redis-cli
    
  4. 停止和启动redis服务

    #停止redis
    docker stop redis01
    #启动redis服务
    docker start redis01
    #重启redis服务
    docker restart redis01
    

安装Nginx代理

#下载镜像
docker pull nginx 
#查看镜像
docker images 
#创建数据卷
docker volume create nginx-vol 
#查看数据卷对应的宿主机目录
docker inspect nginx-vol 
#启动nginx
docker run --name nginx -p 80:80 -v nginx-vol:/etc/nginx -d nginx

数据卷对应的nginx容器的目录为nginx的默认解压目录,以后需要更改nginx配置只需要在数据卷中的目录进行修改即可。

docker stop nginx
docker start nginx
docker restart nginx

安装Nacos组件

#1.下载nacos
docker pull nacos/nacos-server:1.4.1
#2.mysql执行nacos的sql的脚本文件
#将nacos-mysql.sql文件拷贝到mysql容器对应的挂载目录下
#在Linux中启动登录mysql
#进入mysql容器
docker exec -it mysql bash
#登录mysql
mysql -uroot -p
#通过source命令运行sql文件
source /etc/mysql/nacos-mysql.sql  #这里的/etc/mysql为容器中的一个目录(要选择你自己挂载的目录)
#创建并启动nacos容器(账号密码要使用自己宿主机的ip,数据库的密码)
docker run  \
-e TZ="Asia/Shanghai" \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_DATABASE_NUM=1 \
-e MYSQL_SERVICE_HOST=192.168.126.129 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-p 8848:8848 \
--name nacos \
--restart=always \
-d nacos/nacos-server:1.4.1

#重启容器即开机自启nacos
--restart=always
#检查nacos服务
docker ps
#若未成功启动nacos,查看日志信息
docker container logs nacos

window客户端访问http://ip:port/nacos,测试nacos

#停止nacos
docker stop nacos
#启动nacos
docker start nacos
#重启nacos
docker restart nacos
9.Docker容器互联

两个容器之间进行连接,

  1. 可以通过宿主机进行连接通讯(容器的端口会映射到宿主机上)

  2. 两个容器通过虚拟网络进行连接

#新建网络
docker network create -d bridge t-net #t-net为自己起的网络名称
#查看网络信息
docker network ls
docker inspect t-net
#创建容器并加入网络进行互联通讯
docker run -it --name app1 --network t-net centos:7
docker run -it --name app2 --network t-net centos:7
#测试网络互通
在容器app1中,ping app2检查与app2的通讯
在容器app2中,ping app1检查与app1的通讯
ping成功则可以网络互通
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值