首页 > 其他分享 >Docker学习记录

Docker学习记录

时间:2024-04-18 21:13:23浏览次数:21  
标签:容器 记录 apt 学习 mysql 镜像 Docker my docker

docker官方文档https://docs.docker.com/engine/install/ubuntu/
docker 全球镜像仓库https://hub.docker.com/

image.png

1、docker的安装

1.1、卸载旧版

首先如果系统中已经存在旧的Docker,先卸载: 但是不同的系统,卸载方式不一样!!!
Ubuntu系统:

apt-get autoremove docker docker-ce docker-engine  docker.io  containerd runc
dpkg -l | grep docker
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P # 删除无用的相关的配置文件
apt-get autoremove docker-ce-*
rm -rf /etc/systemd/system/docker.service.d
rm -rf /var/lib/docker
docker --version	# 检查是否存在

1.2、安装docker

不同版本,安装步骤也不一样。具体看官网!!!

Ubuntu:

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

# 安装最新版
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 验证
sudo docker run hello-world

# 添加docker用户组 比如:zyp用户
sudo usermod -aG docker zyp

1.3、启动docker服务

# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

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

1.4、配置镜像加速器

这里举例阿里云镜像加速器

首先访问阿里云网站:
https://www.aliyun.com/
注册一个账号。
image.png
image.png

docker命令

举例解读一个命令含义

docker run -d \
	--name mysql \
  -p 3307:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:5.7
  • docker run 创建并运行一个容器,-d是让容器在后台运行
  • --name 给这个容器取名,必须唯一
  • -p 端口映射,在这是云服务器的3307端口,与容器内的3306映射。为什么要映射?因为容器内部对外不可访问
  • -e KEY=VALUE 设置环境变量
  • 最后是指定运行镜像的名称 后面通过冒号:可以接版本号,不写的话就是最新版。

常见命令大全

image.png

说明: **IMAGE_NAME:TAG **表示 镜像名称 :版本号
CONTAINER 表示 容器名称
镜像相关:

  • docker pull IMAGE_NAME:TAG
  • docker images
  • docker rmi IMAGE_NAME:TAG
  • docker commit CONTAINER IMAGE_NAME:TAG 创建某个container的镜像
  • docker save -o XXXXXX.tar **IMAGE_NAME:TAG** 将镜像IMAGE_NAME:TAG导出到本地文件XXXXX.tar
  • docker load -i **XXXX.tar** 将镜像IMAGE_NAME:TAG 从本地文件XXXX.tar中加载出来

容器相关:

  • docker run -itd **IMAGE_NAME:TAG** 将一个镜像创建成容器,并运行(可以添加参数 如, -d -i -t)
    • -i 以交互方式运行容器,通常与-t 同时使用
    • -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用
      • 即启动交互式容器,一般是 bash
    • -d 后台运行容器,即启动守护式容器
  • docker ps -a 查看本地所有容器
  • docker start CONTAINER 启动容器
  • docker stop CONTAINER 停止容器
  • docker restart CONTAINER 重启容器
  • docker attach CONTAINER 进入容器
    • 先按Ctrl-p,再按Ctrl-q可以挂起容器
  • docker exec -it CONTAINER bash 进入该容器执行命令
  • docker rm **CONTAINER** 删除某个容器
  • docker inspect **CONTAINER** 查看某个容器详情,包括数据卷

docker attach 与docker exec 区别:是否开启一个新的进程

  • docker exec 进入容器后开启一个新的终端,可以在里面操作(常用)
  • docker attach 进入容器正在执行的终端(前提 run 的时候 有-it),不会启动新的进程

数据卷

概念

数据卷是一个虚拟文件夹,它将宿主机的文件夹映射到容器内的文件夹,方便操作容器内的文件

常见命令:

  1. docker volume create 创建数据卷
  2. docker volume ls 查看所有数据卷
  3. docker volume rm 删除指定的数据卷
  4. docker volume inspect 查看某个数据卷的详情
  5. docker volume prune 清除数据卷

如何挂载数据卷?

  • 不需要通过命令去主动创建数据卷,当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷
  • 在docker run 命令创建容器时,添加参数 -v **数据卷名**:**容器内文件夹** 进行数据卷的挂载

直接数据挂载宿主机文件夹(不通过数据卷)

  • 在执行dockerrun命令时,使用 -v **本地目录**:**容器内目录** 可以完成本地目录挂载
  • 本地目录必须以 "/" 或 " ./ ”开头,如果直接以名称开头,会被识别为数据卷而非本地目录
    • -v mysql:/var/lib/mysql会被识别为一个数据卷叫mysql (错误)
    • -v ./mysql:/var/lib/mysql会被识别为当前目录下的mysql目录 (正确)

自定义镜像

镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像
image.png

这里举一个例子:

假设我们现在有一个springboot项目打包好的jar包“my_back.jar”,现在要写一个dockerfile文件

# 
FROM openjdk:11.0-jre-buster
# 
ENV TZ=Asia/Shanghai
RUN ln -snf/usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 
COPY my_back.jar /app.jar
# 
ENTRYPOINT ["java", "-jar", "/app.jar"]

注意: openjdk的版本
在云服务器中,我们需要把dockerfile文件和my_back.jar文件放到同一级目录下,然后
如果我们直接在当前目录下通过dockerfile文件构建镜像:**docker build -t IMAGE_NAME .**
这样,我们的自定义的一个java应用的镜像就构建好了!!!

docker网络

默认情况下,所有的容器都是以bridge的方式连接到Docker的一个虚拟网桥上

image.png

由于,当容器重新启动时,容器分配的IP地址会改变,所以容器之间通过内部IP地址互联是不现实的。
于是,我们需要自定义docker网络。
image.png

自定义网络示例:

假设现在宿主机中已经有,A,B两个容器,以及还没有创建成容器的镜像C

  1. 创建一个网络,起名为 “ **my_net ” **

docker network create my_net

  1. 将名为A的容器加入网络

docker network connect my_net A

  1. 将名为B的容器加入到网络

docker network connect my_net B

  1. 也可以在容器创建启动的时候直接加入到网络中,比如C镜像创建成容器

docker run -d --name C -p 8080:8080 --network my_net **IMAGE_NAME:TAG**

DockerCompose

DockerCompose通过一个单独的docker-compose.yml模板文件来定义一组相关联的应用容器,帮助我们实现多个相互关联的docker容器的快速部署。

image.png
举一个例子:

version: "3.8"
services:
	mysql:
  	image: mysql
  	container_name: mysql
  	ports:
    	- "3306:3306"
    evironment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: xxxxxxx
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
    - my_net
  spingboot_backend:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: my_backend
    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:
    	- my_backend
    networks:
      - my_net
networks:
	my_net:
  	name: my_net

可以发现, dockercompose.yaml文件的很多地方与docker run 命令后面的那一大段类似。

**docker compose [OPTIONS] [COMMANDS]**
image.png

标签:容器,记录,apt,学习,mysql,镜像,Docker,my,docker
From: https://www.cnblogs.com/beiyuan888/p/18144379

相关文章

  • LibreCAD源码编译过程记录
    获取源码远程仓库https://github.com/LibreCAD/LibreCAD.git将源码从GitHub克隆到本地将仓库源码检出到提交节点:4b91d9b0f919be41f7e7568c87c5c67dfac189aa,这是LibreCADv2.2.0稳定版的提交节点,如果用更新的普通节点有可能编译出错(已踩坑)部署编译环境Qt5.9.7注意......
  • 毕业设计记录-1
    设计app界面......
  • 模拟电路学习笔记——晶体管电流放大作用
    基本共射放大电路△u1为输入电压信号,接入基极——发射极回路,称为输入回路;放大后的信号在集电极——发射极回路,称为输出回路;因发射极是两个回路的公共端,故称该电路为共射放大电路晶体管工作在放大状态的外部条件:发射结正向偏置,集电结反向偏置输入回路中基极电......
  • 模拟电路学习笔记——晶体三极管(一)
    1.晶体三极管*晶体三极管中有两种带有不同极性电荷的载流子参与导电,故称为双极型晶体管(BJT:BipolarJunctionTransistor),又称半导体三极管,简称晶体管*根据不同的掺杂方式,在同一硅片上制造出三个掺杂区域,并形成两个PN结,就构成晶体管2.几张常见晶体管外形3.晶体管的结......
  • 10 个优化技巧,减少 Docker 镜像大小【转】
    什么是docker?Docker是一种容器引擎,可以在容器内运行一段代码。Docker镜像是在任何地方运行您的应用程序而无需担心应用程序依赖性的方式。要构建镜像,docker使用一个名为Dockerfile的文件。Dockerfile是一个包含许多指令(RUN、COPY、EXPOSE等)的文件。成功执行这些命令后,do......
  • 使用 Dockerfile 定制镜像【转】
    前言大家好,本文是对Docker自定义镜像的详细讲解,讲解了如何进行构建自己的Docker镜像以及Dockerfile的操作指令。希望对大家有所帮助~一、使用Dockerfile定制镜像1.1、Dockerfile定制镜像镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改......
  • 线段树优化建图学习笔记
    关于线段树优化建图对于存在一些单点连向区间或区间连向单点的边,且直接暴力连边会爆炸的题目,就可以考虑使用线段树优化建图。边数量的规模将会是\(n\logn+a\)。例题题目链接。从\(s\)到\(t\)的最短路就是模板。如果暴力建边,最坏情况下需要建的边在\(n^2\)级别,显然是......
  • 模拟电路学习笔记——二极稳压管
    1.稳压二极管*硅材料制成的面接触型晶体二极管*稳压管在反向击穿时,在一定的电流范围内(或者说在一定的功率损耗范围内),端电压几乎不变,表现出稳压特性*广泛应用于稳压电源/限幅电路中2.稳压管伏安特性*稳压器伏安特性与普通二极管类似*稳压管正向特性为指......
  • 近期Node学习思维导图
    ├──基础知识│├──什么是Node.js│├──安装Node.js│├──npm包管理器│├──常用命令行工具│└──模块化(CommonJS规范)│├──核心模块│├──fs模块(文件系统)│├──http模块(创建HTTP服务器)│├──events模......
  • net8 linux docker sqlserver报错error: 31 - Encryption(ssl/tls) handshake failed)
    asp.netcore升级到8.0后遇到数据库不能连接问题?_已解决_博问_博客园(cnblogs.com) 中文提示:连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Aconnectionwassuccessfullyestablishedwiththeserver,butthenanerroroccurredduringthep......