Docker容器基础知识点总结

一 、Docker架构

dockers加速镜像:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://z90yxq2m.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Ubuntu下:
sudo service docker start

查看dockers容器有哪些镜像:

docker images
docker images -q  查看所有镜像的id删除所有镜像  docker rmi `docker images -q`
删除镜像  docker rmi --force 镜像ID

搜索有哪些镜像

docker search imagename

下载镜像到dockers容器

docker pull imagename

从容器中删除某个镜像

docker rmi redis:5.0

查看官网: https://hub.docker.com

1. 容器相关命令
  • 查看容器

  • 创建容器

  • 进入容器

  • 启动容器

  • 停止容器

  • 删除容器

  • 查看容器信息

1.1 创建容器 docker run
docker images
-i 容器一直运行 -t 创建终端  -d 后台运行创建容器
1. 创建容器
方法一
docker run -it --name=lk centos:7 /bin/bash
注意 使用 -it参数创建的容器 创建完成立即进入容器,exit就会立马关闭容器
方法二
docker run -id --name=lk1 centos:7
2. 查看容器
docker ps -a
注意 使用 -id参数创建的容器 创建完成不会立即进入容器,exit也不会关闭容器还是后台运行-it创建的容器一般称为交互式容器, -id创建的容器一般称其为守护式容器
3. 进入容器
docker exec -it lk /bin/bash
4. 停止容器
docker stop lk
5. 启动容器
docker start lk6. 删除容器
docker rm lk
7. 删除所有容器
docker rm `docker ps -aq`  但是开启状态的容器是不能被删除的
8. 查看容器的信息
docker inspect lk
2. docker容器的数据卷
2.1 数据卷的概念与作用

思考:

  • docker容器删除后,容器中产生的数据还在吗?
  • docker容器和外部机器可以直接交换文件吗?
  • docker容器之间想要进行数据交互

通过上面三个问题引入了:

容器的数据卷
在这里插入图片描述

  • 数据卷是宿主机中的一个文件和目录

  • 当容器目录和数据卷目录绑定后,双方的修改会立即同步

  • 一个数据卷可以被多个容器同时挂载

  • 一个容器也可以被挂载多个数据卷

数据卷的作用:

  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间数据交换
2.2配置数据卷
  • 创建启动容器时,使用 -v 参数 设置数据卷

    docker run ... -v 宿主机目录(文件):容器内目录注意事项:
    1. 目录必须是绝对路径
    2. 如果目录不存在, 会自动创建
    3. 可挂载多个数据卷
    
2.3 配置数据卷容器

多容器进行数据交换
在这里插入图片描述

  1. 多个容器挂载同一个数据卷
  2. 数据卷容器

至少需要三个容器

配置数据卷容器的方法

1. 创建启动c3数据卷容器,使用-v参数设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash
2. 创建启动c1 ,c2容器,使用--volumes-from参数 设置数据卷
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
3. docker应用部署
3.1 MySQL部署
  • 容器内的网络服务和外部机器不能直接通信.外部机器和宿主机可以直接通信
  • 宿主机和容器可以直接通信
  • 当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上。外部机器访问宿主机的该端口,从而间接访问容器的服务。
  • 这种操作称为:端口映射
    在这里插入图片描述

安装部署

1. 搜索MySQL镜像
docker search mysql
2. 拉去mysql镜像
docker pull mysql:5.6
3. 在宿主机下创建容器,设置端口映射、目录映射
mkdir ~/mysql
cd mysqldocker run -id -p 3307:3306 --name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
3.2 Tomcat 安装部署
1. 搜索tomcat镜像
docker search tomcat
2. 拉去tomcat镜像
docker pull tomcat
3. 在宿主机下创建容器,设置端口映射、目录映射
mkdir ~/tomcat
cd tomcatdocker run -id -p 8090:8080 --name=c_tomcat \
-v $PWD:/usr/local/tomcat/webapp \
tomcat4. 外部机器访问tomcat
192.168.31.20:8090
3.3 Nginx部署
1. 搜索Nginx镜像
docker search Nginx
2. 拉去Nginx镜像
docker pull Nginx
3. 在宿主机下创建容器,设置端口映射、目录映射
mkdir ~/Nginx
cd Nginx
mkdir conf
cd conf
在~/nginx/conf目录下创建nginx.conf文件,
vim nginx.confdocker run -id -p 80:80 --name=c_nginx \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx4. 外部机器访问tomcat
192.168.31.20:80

nginx.conf的内容是

user administrator root;  #配置用户或者组,默认为nobody nobody。
worker_processes 2;  #允许生成的进程数,默认为1pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log /var/log/nginx/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emergevents {#accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on#multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off#use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventportworker_connections  1024;    #最大连接数,默认为512
}http {include       /etc/nginx/mime.types;   #文件扩展名与文件类型映射表default_type  application/octet-stream; #默认文件类型,默认为text/plain#access_log off; #取消服务日志  #自定义格式	log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;  #combined为日志格式的默认值sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。#tcp_nopush     on;#sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。#upstream mysvr {   #  server 127.0.0.1:7878;#  server 192.168.10.121:3333 backup;  #热备#}server {#keepalive_requests 120; #单连接请求上限次数。listen       80;   #监听端口server_name  127.0.0.1;   #监听地址       location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。#root path;  #根目录#index vv.txt;  #设置默认页#proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表#deny 127.0.0.1;  #拒绝的ip#allow 172.18.5.54; #允许的ip  root   /usr/share/nginx/html;index  index.html index.htm;} error_page 404 /404.html; #错误页# 将服务器错误页重定向到静态页 /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}}include /etc/nginx/conf.d/*.conf;
}
3.4 Redis部署
1. 搜索Redis镜像
docker search Redis
2. 拉去tomcat镜像
docker pull Redis:5.0
3. 在宿主机下创建容器,设置端口映射、目录映射
mkdir ~/Redis
cd tomcatdocker run -id -p 6379:6379  --name=c_Redis \
Redis:5.04. 外部机器访问Redis
192.168.31.20:6379
3.5 gitlab部署

在/usr/local/docker/gitlab目录下创建一个docker-compose.yml文件

version: '3'
services:gitlab:image: 'twang2218/gitlab-ce-zh:9.4'restart: alwayshostname: '172.24.71.184'environment:TZ: 'Asia/Shanghai'GITLAB_OMNIBUS_CONFIG: |external_url 'http://172.24.71.184:8080'gitlab_rails['time_zone'] = 'Asia/Shanghai'gitlab_rails['gitlab_shell_ssh_port'] = 2222unicorn['port'] = 8888nginx['listen_port'] = 8080ports:- '8080:8080'- '8443:443'- '2222:22'volumes:- /usr/local/docker/gitlab/config:/etc/gitlab- /usr/local/docker/gitlab/data:/var/opt/gitlab- /usr/local/docker/gitlab/logs:/var/log/gitlabversion: '3'
networks:my_net:driver: bridge ipam:config:- subnet: 172.30.0.1/24
services:gitlab:image:  'gitlab/gitlab-ce:14.9.5-ce.0'container_name: gitlabhostname: 'gitlab.example.com'restart: alwaysenvironment:TZ: 'Asia/Shanghai'GITLAB_OMNIBUS_CONFIG: |external_url 'http://172.24.71.184:8080'gitlab_rails['time_zone'] = 'Asia/Shanghai'gitlab_rails['gitlab_shell_ssh_port'] = 2222unicorn['port'] = 8888nginx['listen_port'] = 8080# 需要配置到 gitlab.rb 中的配置可以在这里配置,每个配置一行,注意缩进。# 电子邮件配置:gitlab_rails['smtp_enable'] = truegitlab_rails['smtp_address'] = "smtp.qq.com"gitlab_rails['smtp_port'] = 465gitlab_rails['smtp_user_name'] = "xxxxxxx@qq.com"gitlab_rails['smtp_password'] = "授权码,不是密码"gitlab_rails['smtp_authentication'] = "login"gitlab_rails['smtp_enable_starttls_auto'] = truegitlab_rails['smtp_tls'] = true# 这里的邮箱账号和上面保持一致gitlab_rails['gitlab_email_from'] = '528746460@qq.com'user['git_user_email']="528746460@qq.com"# 配置外部redisredis['enable']=falsegitlab_rails['redis_host']="127.0.0.1"gitlab_rails['redis_port']=6379gitlab_rails['redis_password']='password'gitlab_rails['redis_database']=10#配置外部postgresqlpostgresql['enable'] = falsegitlab_rails['db_adapter'] = 'postgresql'gitlab_rails['db_encoding'] = 'utf8'gitlab_rails['db_host'] = '127.0.0.1'gitlab_rails['db_port'] = '5432'gitlab_rails['db_username'] = 'postgres'gitlab_rails['db_password'] = 'postgres'gitlab_rails['db_database'] = "postgres"ports:- '8080:8080'- '8443:443'- '2222:22'volumes:- /usr/local/docker/gitlab/config:/etc/gitlab- /usr/local/docker/gitlab/data:/var/opt/gitlab- /usr/local/docker/gitlab/logs:/var/log/gitlab#- /home/ecs-user/docker/gitlab/public:/opt/gitlab/embedded/service/gitlab-rails/publicshm_size: '256m'logging: driver: "json-file"options: max-size: "2g"max-file: "2"networks:my_net:ipv4_address: 172.30.0.6

保存文件后执行下面命令

1. sudo docker-compose up -d
2. sudo docker ps
3. sudo docker logs -f 容器id
4. Dockerfile 制作镜像

如何将自己的项目给到别人,避免水土不服
操作系统组成部分:

  • 进程调度子系统
  • 进程通信子系统
  • 内存管理子系统
  • 设备管理子系统
  • 文件管理子系统
  • 网络通信子系统
  • 作业控制子系统

Linux 文件系统由 bootfs 和 rootfs 两部分组成

  • bootfs :包含 bootloader (引导加载程序)和 kernel (内核).
  • rootfs : root 文件系统,包含的就是典型 Linux 系统中的/ dev ,
    / proc ,/ bin ,/ etc 等标准目录和文件
  • 不同的 linux 发行版, bootfs 基本一样,而 rootfs 不同,如 ubuntu、centos 等
4.1 Docker 镜像原理
  • docker 镜像是由特殊的文件系统叠加而成的
  • 最低端是bootfs,并使用宿主机的bootfs 复用宿主机的bootfs
  • 第二层root文件系统rootfs,称为base image
  • 然后再往上可以叠加其他的镜像文件
  • 统一文件系统( Union File System )技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
  • 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的境像成为基心镜像。
  • 当从一个镜像启动容器时, Docker 会在最顶层加载一个读写文件系统作为容器

在这里插入图片描述

思考:

1.Docker镜像本质是什么? 复用

  • 是一个分层文件系统

2.Docker 中一个 centos 镜像为什么只有200MB,而一个 centos 操作系统的 iso 文件要几个个 G ?

  • Centos 的 iso 镜像文件包含 bootfs 和 rootfs ,而 docker 的 centos 镜像复用操作系统的 bootfs ,只有 rootfs 和其他晚像层

3.Docker中一个 tomcat 境像为什么有500MB,而一个 tomcat 安装包只有70多 MB ?.

  • 由于 docker 中镜像是分层的, tomcat 虽然只有70多 MB ,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的 tomcat 镜像大小500多 MB
4.2 镜像制作
  1. 容器转为镜像

​ docker commit 容器id 镜像名称:版本号

注意对于 有挂载的一些文件 使用docker commit 是不会转为镜像的

  1. 镜像文件转为压缩包传给别人使用
    下面二选一:
    1.docker save 镜像名字:版本号 > 要打包的名字.tar
    docker save 镜像名字:版本号 > 要打包的名字.tgz

    2.docker save -o 要打包名字.tar 镜像名字:版本号

  2. 压缩文件还原成镜像
    下面二选一:
    1.docker load -i 压缩文件名称
    2.docker load < 已打包的镜像名字.tar/tgz

4.3 dockerfile实现镜像步骤

案例一:

  • 定义父镜像: FROM java :8
  • 定义作者信息: MAINTAINER itheima itheima@itcast.cn
  • 将 jar 包添加到容器: ADD springboot.jar app.jar
  • 定义容器启动执行的命令: CMD java -jar app . jar

执行dockerfile文件

在对应目录下将你的项目jar包发给对应的人员

在创建一个dockerfile

通过 dockerfile 构建镜像: docker bulid - f dockerfile 文件路径﹣ t 镜像名称版本

docker bulid -f ./dockerfile_1 -t websapp .

案例二:

案例:实现步骤

  • 定义父镜像: FROM centos :7
  • 定义作者信息: MAINTAINER itheima itheima@itcast.cn
  • 执行安装 vim 命令: RUN yum install - y vim
  • 定义默认的工作目录: WORKDIR / usr
  • 定义容器启动执行的命令: CMD / bin / bash

使用dockerfile文件创建镜像,执行下面命令

docker bulid -f ./dockerfile_1 -t centos_hsh:1.0.2 .

5. docker compose

是一个编排容器分布式部署的工具

  1. 利用dockerfile定义运行环境镜像
  2. 使用docker-compose.xml定义组成应用的各服务
  3. 运行docker-compose up 启动应用
6. 私有仓库

docker pull registry

id - f dockerfile 文件路径﹣ t 镜像名称版本

docker bulid -f ./dockerfile_1 -t websapp .

案例二:

案例:实现步骤

  • 定义父镜像: FROM centos :7
  • 定义作者信息: MAINTAINER itheima itheima@itcast.cn
  • 执行安装 vim 命令: RUN yum install - y vim
  • 定义默认的工作目录: WORKDIR / usr
  • 定义容器启动执行的命令: CMD / bin / bash

使用dockerfile文件创建镜像,执行下面命令

docker bulid -f ./dockerfile_1 -t centos_hsh:1.0.2 .

5. docker compose

是一个编排容器分布式部署的工具

  1. 利用dockerfile定义运行环境镜像
  2. 使用docker-compose.xml定义组成应用的各服务
  3. 运行docker-compose up 启动应用
6. 私有仓库

docker pull registry

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL基础学习: linux系统mysql 密码插件 validate_password安装

1、没有安装mysql密码插件&#xff0c;执行命令&#xff1a;SHOW VARIABLES LIKE ‘validate_password%’; 2、安装mysql密码插件&#xff0c;执行命令&#xff1a;install plugin validate_password soname ‘validate_password.so’; 3、再次执行&#xff1a;SHOW VARIABLE…

【Unity入门】MenuItem 和 ContextMenu 的使用方法

目录 一、ContextMenu描述使用示例ContextMenuItem使用示例 二、MenuItem描述使用示例 三、MenuItem 和 ContextMenu 的区别 一、ContextMenu 描述 ContextMenu 属性用于向上下文菜单添加命令。 在该附加脚本的 Inspector 中&#xff0c;当用户选择该上下文菜单时&#xff0c…

【Spring实战】16 Profile

文章目录 1. 定义2. 使用2.1 定义 Profile2.2 激活 Profile 3. 演示3.1 properties文件3.2 打印日志3.3 启动服务&验证3.4 修改 active3.5 重启服务&验证 4. 应用场景4.1 数据库配置4.2 日志配置 5. 代码详细总结 Spring 框架提供了一种强大的机制&#xff0c;允许在不…

docker 在线安装mysql 8.0.21版本

1、拉取mysql 8.0.21版本镜像 2、查看镜像 docker images 3、在宿主机 /usr/local/mysql 下的 conf 文件夹下&#xff0c;创建 my.cnf 文件&#xff0c;并编辑内容 [mysql] default-character-setutf8 [client] port3306 default-character-setutf8 [mysqld] port3306 se…

普中STM32-PZ6806L 使用FlyMcu串口烧录程序

简介 我的串口下载电路坏掉了, 所以研究了下如何通过USB转TTL进行程序的下载, 为后续Bootloader部分做准备;连接 我的板几乎是十年前买的&#xff0c; 所以电路与现有网上的资料有些差异, 所以仅供参考 USB 转 TTL线 与开发板 连接&#xff0c; 如图图中 ①, 需要去掉第一个…

YOLOv8训练损失、mAP画图功能 | 支持多结果对比,多结果绘在一个图片(科研必备)

一、本文介绍 本文给大家带来的是YOLOv8系列的绘图功能&#xff0c;我将向大家介绍YOLO系列的绘图功能。我们在进行实验时&#xff0c;经常需要比较多个结果&#xff0c;针对这一问题&#xff0c;我写了点代码来解决这个问题&#xff0c;它可以根据训练结果绘制损失(loss)和mA…

python实现平滑线性滤波器——数字图像处理

原理&#xff1a; 平滑线性滤波器是一种在图像处理中广泛使用的工具&#xff0c;主要用于降低图像噪声或模糊细节。这些滤波器的核心原理基于对图像中每个像素及其邻域像素的线性组合。 邻域平均&#xff1a; 平滑线性滤波器通过对目标像素及其周围邻域像素的强度值取平均来工…

Openwrt修改Dropbear ssh root密码

使用ssh工具连接路由器 输入&#xff1a;passwd root 输入新密码 重复新密码 设置完成 rootImmortalWrt:~# passwd root Changing password for root New password:

dll文件和exe文件的区别和关系

dll文件 DLL(Dynamic Link Library)文件为动态链接库文件&#xff0c;又称"应用程序拓展"&#xff0c;是软件文件类型。在Windows中&#xff0c;许多应用程序并不是一个完整的可执行文件&#xff0c;它们被分割成一些相对独立的动态链接库&#xff0c;即DLL文件&…

【前缀和】【分类讨论】【二分查找】2983:回文串重新排列查询

作者推荐 【动态规划】【字符串】C算法&#xff1a;正则表达式匹配 本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 二分查找算法合集 回文串重新排列查询 给你一个长度为 偶数 n &#xff0c;下标从 0 开始的字符…

QT上位机开发(绘图软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 稍微复杂一点的软件&#xff0c;一般都是带有绘图功能。绘图的意义&#xff0c;不仅仅是像CAD一样&#xff0c;可以进行模型的设计、比对和调试。它…

爬虫实战-微博评论爬取

简介 最近在做NLP方面的研究&#xff0c;以前一直在做CV方面。最近由于chatgpt&#xff0c;所以对NLP就非常感兴趣。索性就开始研究起来了。 其实我们都知道&#xff0c;无论是CV方向还是NLP方向的模型实现&#xff0c;都是离不开数据的。哪怕是再先进的代码&#xff0c;都是…

数据结构--队列【详解】~(˶‾᷄ꈊ‾᷅˵)~

目录 队列定义&#xff1a; 队列的声明与头文件的包含&#xff1a; 队列的声明&#xff1a; 头文件的包含&#xff1a; 队列的基本操作: 初始化队列 : 摧毁队列&#xff1a; 入队列&#xff1a; 出队列&#xff1a; 返回队头数据&#xff1a; 返回队尾数据&#xff1…

Node.js使用jemalloc内存分配器显著减少内存使用

前言 Node.js 默认使用的是 ptmalloc(glibc) 内存分配器&#xff0c;而&#xff1a; 在服务端领域「不会选择默认的 malloc」是一个常识。&#xff08; 来源 &#xff09; ptmalloc 的分配效率较低&#xff08; 来源 &#xff09;&#xff0c;对于 长时间、多核 / 多线程 运行…

算法训练day56|动态规划part16

583. 两个字符串的删除操作 逆向思路&#xff1a;求最长公共子序列&#xff0c;在用总长度-2*公共子序列长度 正向思路&#xff1a;删除多少 1. dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff1a;以i-1为结尾的字符串word1&#xff0c;和以j-1位结…

JDBC->SpringJDBC->Mybatis封装JDBC

一、JDBC介绍 Java数据库连接&#xff0c;&#xff08;Java Database Connectivity&#xff0c;简称JDBC&#xff09;是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口&#xff0c;提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们…

polar CTF WEB-veryphp

1、题目 <?php error_reporting(0); highlight_file(__FILE__); include("config.php"); class qwq {function __wakeup(){die("Access Denied!");}static function oao(){show_source("config.php");} } $str file_get_contents("ph…

【快速全面掌握 WAMPServer】11.安装 PHP 扩展踩过的坑

网管小贾 / sysadm.cc 我们在调试程序代码时&#xff0c;总会遇到一些 PHP 项目需要某些扩展组件。 而在 WAMPServer 下通常的 PHP 扩展的安装也不算有多麻烦。 具体关于 PHP 扩展的区分&#xff08;比如安全线程或非安全线程&#xff09;&#xff0c;以及怎么安装小伙伴们可…

TDD-LTE 寻呼流程

目录 1. 寻呼成功流程 1.1 空闲态寻呼 1.2 连接态寻呼 2. 寻呼失败流程 2.1 Paging消息不可达 2.2 RRC建立失败 2.3 eNodeB未上发Initial UE message或达到超时 1. 寻呼成功流程 1.1 空闲态寻呼 寻呼成功&#xff1a;MME发起寻呼&#xff08;S1 接口发送Paing 消息&…

blender mix节点和它的混合模式

Mix 节点是一种用于混合两个颜色或者两个图像的节点&#xff0c;它有以下几个输入和输出&#xff1a; Color1&#xff1a;用于接收第一个颜色或者图像&#xff0c;也就是基色。Color2&#xff1a;用于接收第二个颜色或者图像&#xff0c;也就是混合色。Fac&#xff1a;用于控制…