Docker教程

news/2024/10/10 18:53:14

目录
  • Docker 教程
    • 一、基础:安装Docker
    • 二、命令
      • 1. 命令:镜像操作
      • 2. 命令:容器操作
      • 3. 命令:run 细节
      • 4.命令:保存镜像
      • 5. 命令:分享镜像
    • 三、存储
      • 1. 存储:目录挂载
      • 2. 存储:卷映射
    • 四、网络
      • 1. 默认网络是docker0
      • 2. 网络-自定义网络
      • 3. 网络-redis主从集群
    • 五、Docker compose
    • 六、DockerFile
      • 1. 基础使用
      • 2. 镜像分层机制

Docker 教程

简单介绍:

image-20240930190525374

一、基础:安装Docker

用ubuntu 系统来做演示

  1. 删除系统里面原有的镜像
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
  1. 设置 Docker 的apt存储库。
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc# Add the repository to Apt sources:
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] 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
  1. 安装 Docker 包命令
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 安装完毕,设置开机启动
sudo systemctl enable docker 
  1. 配置加速镜像

    https://www.cnblogs.com/alex-oos/p/18417200

其他系统请参考官方文档:

https://docs.docker.com/engine/install

二、命令

1. 命令:镜像操作

image-20240930193155629

  1. docker search 检索+,名称,一般可以搜索出来各种版本的镜像,带office 的名称就是官方的镜像,其他的很有可能就是个人的

    docker search nginx
    

    image-20240930191801393

  2. docker pull 下载

    #docker 拉取镜像,镜像名+版本号,默认拉取的是latest版本
    docker pull nginx:latest
    

    image-20240930192436708

  3. docker images 查看本地镜像列表

    docker images 
    

    image-20240930192712982

  4. docker rmi 删除镜像

    删除的时候,可以使用唯一id,也可以使用镜像名,如果镜像被占用就删除不了

    docker rmi nginx
    

    image-20240930192752612

2. 命令:容器操作

image-20240930193239892

  1. 运行docker run

    docker run + 镜像名

docker run -d --name=mynginx nginx

image-20240930194156684

  1. docker ps 查看此刻所有运行的容器
docker ps # 查看所有容器
docker ps -a 
# 过滤中你想要的容器名称
docker ps -a | grep '容器名'

image-20240930194334625

  1. docekr stop 停止 +容器名/容器id
docker stop mynginx
docker stop 95c7e10581f3

image-20240930194525624

  1. docker start 启动 +容器名/容器id
docker start mynginx 
docker start 95c7e10581f3
  1. docker restart 重启 +容器名/容器id
docker restart mynginx 
docker restart 95c7e10581f3
  1. docker stats 状态+容器名/容器id

    查看cpu,内容,占用率

docker stats mynginx 
docker stats 95c7e10581f3

image-20240930194815752

  1. docker logs 日志 ++容器名/容器id
docker logs mynginx

image-20240930194937610

  1. docker exec 进入容器

    -it 交互式进入

    /bin/bash 用bash的启动指令

#docker exec -it +容器名称/容器id  /bin/bash 
docker exec -it mynginx /bin/bash
  1. docekr rm 删除 +容器名/容器id

    注意:如果容器处于运行状态无法删除,先停止容器运行,在进行删除操作,强制-f 不推荐使用,仅仅知道即可

docker rm mynginx 
docker rm 95c7e10581f3
#强制
docker rm -f mynginx 

3. 命令:run 细节

docker run +镜像名

  1. -d 后台运行
  docekr run  -d nginx
  1. --name +容器名 +镜像名
docker run --name=mynginx nginx:latest
  1. -p 端口映射 本机端口:容器端口
docker run -p 80:80  --name=mynginx nginx:latest

4.命令:保存镜像

image-20240930200825714

  1. docker commit 提交容器,将容器提交一下
   docker commit -m '注释' 容器名
  1. docker save 将镜像保存为一个文件
#docker save -o +文件名 + 镜像
docker save -o 'mynginx.tar' nginx
  1. docker load 将文件加载为一个镜像
# docker 加载文件
docker load -i mynginx.tar

5. 命令:分享镜像

image-20240930201112946

docekr hub 地址:https://hub.docker.com/

介绍:docker hub 其实主要是用于存储docekr镜像的地方,类似于github,首先需要注册一下,然后将对应的镜像给push上去

docker login 登录 输入你的账号与密码,即将登录成功

docker login 

docker tag 设置标签

docker tag [OPTIONS] IMAGE [NAME[:TAG]]
  • IMAGE:要打标签的镜像的 ID 或名称。
  • [NAME[:TAG]]:新的标签名称,其中 NAME 是仓库的名称,TAG 是标签。

demo:

一般做的时候,做一个指定版本,在做一个最新版本的,这样子方便别人拉取到最新版本的

# 设置标签
docker tag  mynginx:v1  alexoos/nginx:v1
# 设置完查看一下镜像
docker  images
docker tag  mynginx:v1  alexoos/nginx:latest

docker push 推送 + 镜像名称

docker push alexoos/nginx:latest

三、存储

docker ps -aq 打印所有的容器id

# 打印所有容器的id
docker ps -aq 
# 批量删除所有未运行的容器
docker rm $(docker ps -aq)

1. 存储:目录挂载

命令: -v 目录挂载 本地目录:容器目录

目录挂载主要是以外面的文件夹为准,如果目录挂载时外面的文件夹,没有文件,那么里面的也没有文件

如果本地目录不存在,会自动进行创建目录

docker run -d -p 81:80 -v /app/nghtml:/usr/share/nginx/html --name app01 nginx

目录挂载的作用:

  1. 容器内将内容修改后,会自动同步到本地目录,一劳永逸的方式

  2. 将数据持久化,不担心数据会丢失,容器丢失,数据仍然存在

2. 存储:卷映射

-v 卷映射 -v ngconf:/etc/nginx

卷映射:是以容器内部的文件夹为准,第一次启动,内部有数据,将内部的数据映射到外部

应用范围:

  • 用于配置挂载
  • 用于本地不存在,但是容器启动又必须读取的配置
# -v 卷名:容器目录
-v ngconf:/etc/nginx
#  启动容器,使用目录挂载,卷映射,如果卷不存在,就自动创建
docker  run  -d -p 99:80 -v /app/nghtml:/usr/share/nginx/html -v ngconf:/etc/nginx --name app02 nginx
# 卷目录的默认路径
/var/lib/docker/volumes/<volume-name>
# 列出所有的卷
docker volume  ls
# 查看某个卷的详细信息
docker volume inspect ngconf (卷名)

四、网络

介绍:

分为默认网络与自定义网络

1. 默认网络是docker0

查看默认网络:ip a ,找到docker0 发现 inet 为 172.17.0.1/16 ,这个一般都是默认网络

image-20241010152227138

docker 一般每启动一个容器,默认会给容器一个ip地址,直接访问容器内的数据,可以使用容器ip+容器端口互相访问

查看容器的ip的相关命令

# 启动一个容器
docker run -d -p 8011:80 --name app01 nginx
# docker inspect + 容器名,直接看network,network 下面有相关的ip地址,一般是172.17.0.1 这个网段
docker inspect app01

image-20241010152113231

2. 网络-自定义网络

自定义网络:其实就是为了方便A容器与B容器直接访问,因为ip 容易发生改变,所以自定义开辟一个网络,这样子用容器名+端口互相访问,更加高效与便捷

# 自定义网络相关命令 先输入--help 方便查看如何使用
docker network  --help
docker network create mynet

自定义网络的网段一般是:172.22.0.1

启动容器的时候,加入 --network 参数即可

启动的容器就加入了自定义网络了

docker run -d -p 88:80 --name app01 --network mynet nginx 
docker run -d -p 88:80 --name app02 --network mynet nginx 
#访问的时候,直接用容器名+端口即可

设置完毕之后,两个容器内相互访问直接用 curl http://app01:80 直接就访问成功了,只有在容器内相互访问才可以,在容器外访问不行

如果想设置都可以访问,建议使用自定义网络,设置自定义网段 +固定ip地址,这样子才可以,参考项目为:

https://gitee.com/alex-oos/kinit/blob/master/docker-compose.yml 这个设置的相对标准一些

3. 网络-redis主从集群

先不补充,后期补充,

五、Docker compose

介绍:

批量管理容器的工具

首先需要准备一个docker-compose.yml 文件

常用的命令如下:

#上线 (启动并且创建所有容器)
docker-compose up -d
# 重启所有容器
docker-compose restart# 停止所有容器 下线
docker-compose down# 查看所有容器状态
docker-compose ps -a
# 启动单个容器
docker-compose start x1 x2 x3 
# 停止多个容器
docker-compose stop x1 x2 x3 
# 扩容容器 扩容 x 2=3 代表 x2容器启动3个
docker compose scale x2=3 

举例 :需要安装 wordpress

正常安装步骤

  1. 创建网络 blog

    docker network create blog 
    
  2. 创建容器mysql

    docker run --name wordpress-db -e MYSQL_ROOT_PASSWORD=yourpassword -e MYSQL_DATABASE=wordpress --network wordpress-net -d mysql:8.0
    
  3. 创建容器 wordpress

    docker run --name wordpress -e WORDPRESS_DB_PASSWORD=yourpassword -e WORDPRESS_DB_HOST=wordpress-db:3306 -p 80:80 --network wordpress-net -d wordpress
    

使用 docker-compose,一个文件即可

创建一个docker-compse.yml 文件,文件如下

name: myblog 
services:mysql:# 容器名 container_name: mysql# 镜像image: mysql:8.0# 端口ports:- "3306:3306"# 环境变量environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=wordpress# 挂载卷volumes:# 卷映射- mysql-data:/var/lib/mysql# 目录挂载- /app/mysql/conf.d:/etc/mysql/conf.d# 自动重启restart: always# 网络networks:blog_network:ipv4_address: "177.8.0.2"wordpress:container_name: wordpressimage: wordpress:latestports:- "9011:80"environment:WORDPRESS_DB_HOST: mysqlWORDPRESS_DB_NAME: wordpressWORDPRESS_DB_USER: rootWORDPRESS_DB_PASSWORD: 123456volumes:- wordpress:/var/www/htmlrestart: alwaysnetworks:blog_network:ipv4_address: "177.8.0.3"depends_on:- mysql# 持久化存储卷
volumes:mysql-data:wordpress:networks:blog_network:driver: bridgeipam:driver: defaultconfig:- subnet: "177.8.0.0/16"gateway: "177.8.0.1"

进入到文件下,执行下面命令

docker-compse up -d 

六、DockerFile

1. 基础使用

常用命令:

image-20241010181706036

文件内需要包含

  • 基础环境
  • 软件包
  • 启动命令

比如:启动一个java 服务,建议将基础环境与代码软件分开,这里是写的所有,比较全,其实也可以直接用网上的镜像也是可以的

创建一个文件Dockerfile


# 从某一个基础镜像创建
FROM  Ubuntu:20.04
#  添加标签,可以设置用户名
Label author="Alex"
#  指定工作目录
WORKDIR /home/work
COPY . /home/work# 安装基础环境,jdk,mavn ,git 
RUN apt-get update && apt-get install -y openjdk-11-jdk && apt-get install -y maven && apt-get install -y git# 构建指定参数
ARG env# 运行自定义命令
RUN cd /home/work && mvn  -B clean install -P${env} -Dmaven.test.skip=true -Dautoconfig.skip -pl semi-automatic-migration-server -am  && cp -r semi-automatic-migration-server/target target# 暴露端口
EXPOSE 8080#  容器固定启动命令
ENTRYPOINT ["/bin/bash"]# 容器启动命令或参数 (拼接在 ENTRYPOINT 后面)
CMD  java  -Dfile.encoding=utf-8  -jar target/semi-automatic-migration-server.jar

docker 构建命令如下:

# docker build --build-arg env=环境 -t 镜像名 . (点是当前目录的意思)
docker build --build-arg env=test  -t demo1 .

docker build 参数

--build -arg 参数构建传递

-t 镜像名

--file +文件名 指定文件,如果不在当前目录下,或文件名不为Dockerfile 就需要这个参数

2. 镜像分层机制

​ 基础环境做第一层,代码做第二层,一般都是这样子使用即可

image-20241010184544175

参考文档:

视频资料地址:

https://www.bilibili.com/video/BV1Zn4y1X7AZ?p=1&vd_source=e33a356475cf6a18a9f6345f4e44a209

Docker官方文档(英文版)

https://docs.docker.com/get-started/

https://docs.docker.com/engine/reference/builder/

优秀blog(中文版)

https://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html

https://chinese.freecodecamp.org/news/the-docker-handbook/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/69899.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

06-蓝图实战(图书数据搜索与查询),编写get和post请求,同时应用WTForms参数验证

需求:之前的路由请求格式,不是通用的请求格式,转化为get 和 post请求之后,可以通过request方法获取其中的参数 参考格式 04-使用 Flask 框架实现 POST和GET接口 - 马铃薯1 - 博客园 (cnblogs.com)@web.route(/book/search/<q>) def search(q):pass 第三方插件库,WT…

2024.9.30 CSP

模拟赛 赛后看着分哗啦啦的往下掉。 T1 median 找中位数,赛时假做法 A 了, 没想到直接搜。。。code #include<bits/stdc++.h> using namespace std; const int N = 1e5+5,mod = 998244353; int n; int a[6][N],ans,f[6][4]; unordered_map<int,bool> mp; int dfs…

VMware Workstation 17.6.1 发布下载,修复 4 个已知问题

VMware Workstation 17.6.1 发布下载,修复 4 个已知问题VMware Workstation 17.6.1 发布下载,修复 4 个已知问题 VMware Workstation 17.6.1 Pro for Windows & Linux - 领先的免费桌面虚拟化软件 基于 x86 的 Windows、Linux 桌面虚拟化软件 请访问原文链接:https://sy…

android开发编译openssl源代码生成libcrypto.so和libssl.so两个动态库用于android ndk项目开发使用

openssl编译本篇文章的操作是在Linux环境之下,在虚拟机ubuntu 20版本上操作的步骤1. openssl下载解压tar包openssl下载地址:https://openssl-library.org/source/下载完解压:tar -zxvf openssl-3.3.2.tar.gz // 我这里下载openssl-3.3.2.tar.gz版本2. 编译openssl库,得到l…

MySQL下载、安装与配置

MySQL下载、安装与配置下载MySQL 1、进入MySQL官网 2、点击 Products,再点击 MySQL Community Server3、选择MySQL版本,点击 Go to Download Page4、点击 Download 下载MySQL安装程序5、点击 No thanks, just start my download,等待下载安装MySQL 1、双击运行下载的安装程序…

web端ant-design-vue Upload 手动实现文件上传使用小节

web端ant-design-vue Upload 手动实现文件上传使用小节。最近在项目开发中用到了手动实现文件上传的组件,之前都是自动上传把返回的文件信息保存到服务器。手动上传相对复杂一下,我把遇到的一些问题整理记录一下,有需要的朋友可以避免走弯路! 1、文件上传需要用formdata格式…

记一次k8s挂载configmap配置文件识别为文件夹的错误

错误表现 挂载.env为配置文件时被识别成一个文件夹而不是一个文件错误原因 创建configmap的时候原始文件使用的是env解决方式 创建configmap的时候需要使用的文件需要修改文件名为挂载的文件名一致 例如本次挂载的文件名是.env则需要在创建configmap的时候原始文件名修改为.evn…

开源项目更新|WPF/Uno Platform/WinUI 3三个版本的《英雄联盟客户端》

为了统一WPF/WinUI3/Uno仓库的项目架构,我们基于.NET Standard 2.0设计了一个可在所有平台上运行的框架,无需依赖第三方库。这个框架直接实现了项目分散化、模块化、视图注入、依赖注入、单例模式和MVVM等基于XAML的项目架构所需功能。采用这种方法,我们可以在不同版本(如WPF、…