一文带你入门docker

article/2025/10/20 19:31:44

✅作者简介:我是18shou,一名即将秋招的java实习生

🔥系列专栏:牛客刷题专栏

📃推荐一款模拟面试、刷题神器👉 [在线刷题面经模拟面试](在线面试刷题)

 

目录

安装Docker

卸载旧版本

Docker初装命令

Docker架构

配置阿里云镜像

Docker开启相关命令

Docker镜像相关命令

Docker容器相关命令

Docker容器、数据卷

Docker容器、数据卷命令

Docker之部署

一、部署MySQL

二、部署Tomcat

三、部署Nginx

四、部署Redis

Docker镜像原理

Docker容器转化为镜像

DockerFile

DockerFile自定义centos

DockerFile部署springboot

Docker Compose

一、安装Docker Compose

二、卸载Docker Compose

三、 使用docker compose编排nginx+springboot项目

Docker私有仓库

一、私有仓库搭建

二、将镜像上传至私有仓库

三、 从私有仓库拉取镜像


安装Docker

uname -r查看系统内核

4.18.0-193.14.2.el8_2.x86_64

[root@iZuf61ahstfl2fj58302fsZ /]# cat /etc/os-release查看系统版本

卸载旧版本

yum remove docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-logrotate \

docker-engine

Docker初装命令

# 1、yum 包更新到最新 yum update

# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 yum install -y yum-utils device-mapper-persistent-data lvm2

# 3、 设置yum源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 4、 安装docker,出现输入的界面都按 y yum install -y docker-ce

# 5、 查看docker版本,验证是否验证成功 docker -v

Docker架构

配置阿里云镜像

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

每个人的地址都不同(从服务器上获取)

cat /etc/docker/daemon.json#查看文件

Docker开启相关命令

启动Docker

systemctl start docker

查看Docker状态

systemctl status docker

停止Docker

systemctl stop docker

开机自启动Docker

systemctl enable docker

重启Docker

systemctl restart docker

Docker镜像相关命令

镜像就是打包了某一个软件和它需要的运行环境

可以去dockerhub查看镜像版本

#查看docker镜像

docker images

#docker搜寻镜像 比如 redis

docker search xxx

#docker拉取镜像

docker pull xxx 默认拉取最新版,假如指定redis版本:docker pull redis:5.0

#docker删除镜像

[root@iZuf61ahstfl2fj58302fsZ /]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

redis 5.0 c5da061a611a 3 months ago 110MB

redis latest 7614ae9453d1 3 months ago 113MB

[root@iZuf61ahstfl2fj58302fsZ /]# docker rmi 7614ae9453d1

或者docker rmi redis:5.0

先通过images搜寻到对应镜像ID然后输入命令

docker rmi 7614ae9453d1

第二种方式:通过名字和版本删除

docker rmi xxx:xxx

查看所有镜像id

docker images -q

#删除所有镜像

docker rmi `docker images -q`

Docker容器相关命令

容器是镜像运行出来的实例

#运行 xx:起名 xxx:镜像 xxxx:版本 -i:表示容器保持一直运行 -t:分配终端输入命令

docker run -i -t --name=xx xxx:xxxx /bin/bash

#运行已有的容器 id通过docker ps -a 查询

docker start id

#查看运行容器

docker ps

#查看所有容器

docker ps -a

#后台运行容器 xx:起名 xxx:镜像 xxxx:版本 -i:表示容器保持一直运行 -t:分配终端输入命令

docker run -i -d --name=xx xxx:xxxx /bin/bash

#进入容器终端 name是之前起的名字

docker exec -i -t name /bin/bash

#停止某个容器 :name是给容器起的名字

docker stop name

#删除某个容器 :name是给容器起的名字

docker rm name

#删除所有容器:不能删除正在运行的容器

docker rm `docker ps -aq`

#查看容器的详细信息:name是给容器起的名字

docker inspect name

Docker容器、数据卷

问题1:Docker容器删除后,容器中产生的数据随之销毁

答案:持久化到数据卷

问题2:Docker容器和外部机器可以直接交换文件吗?

答案:不可以,但是可以通过数据卷间接交换,改变数据卷间接改变容器数据

问题3:容器之间想要进行数据交互?

答案:一个数据卷挂载多个容器,这些容器就可以进行数据交互了

Docker容器、数据卷命令

目录必须是绝对路径、如果目录不存在会自动创建、可挂载多个

#挂载数据卷 目录会自动创建 -v (数据卷目录) :(容器目录) (容器名称: 版本号)终端

docker run -it --name=c2 -v /root/data:/root/data_container centos:7 /bin/bash

#多容器进行数据交换的方式

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

docker run -it --name=c4 -v ~/data:/root/data redis:5.0

docker run -it --name=c3 -v ~/data:/root/data redis:5.0

#2:数据卷容器:即上图:c3挂载数据卷,c1、c2挂载c3,c1、c2、c3就可以互相传输和通信

c3称为数据卷容器

#创建启动c3数据卷容器,使用-v参数设置数据卷 volume是数据卷目录

docker run -it --name=c3 -v /volume redis:5.0 /bin/bash

#创建启动c1、c2容器,使用--volumes-from参数设置数据卷

docker run -it --name=c1 --volumes-from c3 redis:5.0 /bin/bash

docker run -it --name=c2 --volumes-from c3 redis:5.0 /bin/bash

这样c1 c2 c3就可以互相传输和通信了

Docker之部署

一、部署MySQL

记得开启所有防火墙端口包括外部连接的端口

  1. 搜索mysql镜像

docker search mysql

  1. 拉取mysql镜像

docker pull mysql:5.6

  1. 创建容器,设置端口映射、目录映射

# 在/root目录下创建mysql目录用于存储mysql数据信息

mkdir ~/mysql

cd ~/mysql

docker 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

  • 参数说明:
    • -p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。
    • -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录
    • -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录
    • -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录
    • **-e MYSQL_ROOT_PASSWORD=123456:**初始化 root 用户的密码。
  1. 进入容器,操作mysql

docker exec -it c_mysql /bin/bash

  1. 使用外部机器连接容器中的mysql

二、部署Tomcat

#搜索tomcat镜像

docker search tomcat

#拉取tomcat镜像

docker pull tomcat

  1. 创建容器,设置端口映射、目录映射

# 在/root目录下创建tomcat目录用于存储tomcat数据信息

mkdir ~/tomcat

cd ~/tomcat

docker run -id --name=c_tomcat \

-p 8080:8080 \

-v $PWD:/usr/local/tomcat/webapps \

tomcat

  • 参数说明:
    • **-p 8080:8080:**将容器的8080端口映射到主机的8080端口**-v $PWD:/usr/local/tomcat/webapps:**将主机中当前目录挂载到容器的webapps
  1. 使用外部机器访问tomcat
  2. 在tomcat文件夹下创建test/index.html 并在index.html中写入xxx
  3. 访问106.15.89.94:8080/test/index.html

三、部署Nginx

  1. 搜索nginx镜像

docker search nginx

  1. 拉取nginx镜像

docker pull nginx

  1. 安装完成后,我们可以使用以下命令来运行 nginx 容器:

docker run --name nginx-test -p 80:80 -d nginx

  • --name nginx-test:容器名称。
  • -p 80:80: 端口进行映射,将本地 80 端口映射到容器内部的 80 端口。
  • -d nginx: 设置容器在在后台一直运行。
  1. 使用外部机器访问nginx

在html文件里面新建index.html然后访问106.15.89.94:80

四、部署Redis

  1. 搜索redis镜像

docker search redis

  1. 拉取redis镜像

docker pull redis:5.0

  1. 创建容器,设置端口映射

docker run -id --name=c_redis -p 6379:6379 redis:5.0

  1. 使用外部机器连接redis ./可能有问题

./redis-cli.exe -h 192.168.149.135 -p 6379

Docker镜像原理

Docker容器转化为镜像

DockerFile

hub.docker.com 当中搜索镜像的dockerfile

关键字

作用

备注

FROM

指定父镜像

指定dockerfile基于那个image构建

MAINTAINER

作者信息

用来标明这个dockerfile谁写的

LABEL

标签

用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看

RUN

执行命令

执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"]

CMD

容器启动命令

提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"]

ENTRYPOINT

入口

一般在制作一些执行就关闭的容器中会使用

COPY

复制文件

build的时候复制文件到image中

ADD

添加文件

build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务

ENV

环境变量

指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value

ARG

构建参数

构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数

VOLUME

定义外部可以挂载的数据卷

指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"]

EXPOSE

暴露端口

定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp

WORKDIR

工作目录

指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径

USER

指定执行用户

指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户

HEALTHCHECK

健康检查

指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制

ONBUILD

触发器

当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大

STOPSIGNAL

发送信号量到宿主机

该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。

SHELL

指定执行脚本的shell

指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell

DockerFile自定义centos

自定义一个可以使用vim命令的centos

#首先创建一个文件docker-file(随意起名),然后在文件中vim一个文件centos_dockerfile 输入以下指令

FROM centos:7

MAINTAINER itheima <2734@qq.com>

RUN yum install -y vim

WORKDIR /usr

cmd /bin/bash

#然后docker build 对应上方vim的文件

docker build -f ./centos_dockerfile -t itheima_centos:1 .

#这样镜像就构建出来了用docker images可以查看已有镜像,发现有theima_centos,运行容器

docker run -it --name=dockerfile_centos itheima_centos:1

这时候centos就可以使用vim命令了

DockerFile部署springboot

首先将一个springboot项目打成jar包确保能运行

然后使用xftp将jar包复制到linux系统某个文件夹下(docker-files)下

然后配置文件vim springboot_dockerfile

FROM java:8

MAINTAINER itheima <2734@qq.com>

ADD springbootjlvpC-0.0.1-SNAPSHOT.jar app.jar

CMD java -jar app.jar

#docker build 对应上方vim的文件springboot_dockerfile ,这个app是镜像名

docker build -f ./springboot_dockerfile -t app .

#这样镜像就构建出来了用docker images可以查看已有镜像,发现有app,运行容器

如果有mysql的配置这里会报错,因为连不上本机的mysql了。。9000s是映射端口

docker run -id -p 9000:8080 --name=dockerfile_springboot app

Docker Compose

一、安装Docker Compose

# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。

curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 设置文件可执行权限 chmod +x /usr/local/bin/docker-compose

# 查看版本信息需要先设置权限 docker-compose -version

二、卸载Docker Compose

# 二进制包方式安装的,删除二进制文件即可 rm /usr/local/bin/docker-compose

三、 使用docker compose编排nginx+springboot项目

  • 创建docker-compose目录

mkdir ~/docker-compose

cd ~/docker-compose

  • 编写 docker-compose.yml 文件

version: '3'

services:

nginx:

image: nginx

ports:

- 80:80

links:

- app

volumes:

- ./nginx/conf.d:/etc/nginx/conf.d

app:

image: app

expose:

- "8080"

  • 创建./nginx/conf.d目录

mkdir -p ./nginx/conf.d

  • 在./nginx/conf.d目录下 编写itheima.conf文件

server {

listen 80;

access_log off;

location / {

proxy_pass http://app:8080;

}

}

  • 在~/docker-compose 目录下 使用docker-compose 启动容器

docker-compose up

  • 测试访问

http://106.15.89.94/hello

Docker私有仓库

一、私有仓库搭建

#1、拉取私有仓库镜像

docker pull registry

#2、启动私有仓库容器

docker run -id --name=registry -p 5000:5000 registry

#3、打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库 搭建成功

#4、修改daemon.json

vim /etc/docker/daemon.json

在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip

{"insecure-registries":["私有仓库服务器ip:5000"]}

#5、重启docker 服务

systemctl restart docker
docker start registryy

二、将镜像上传至私有仓库

# 1、标记镜像为私有仓库的镜像    

docker tag centos:7 私有仓库服务器IP:5000/centos:7

# 2、上传标记的镜像    

docker push 私有仓库服务器IP:5000/centos:7

三、 从私有仓库拉取镜像

#拉取镜像 之前是公网拉 现在是内网拉

docker pull 私有仓库服务器ip:5000/centos:7


http://chatgpt.dhexx.cn/article/DO5eh7ak.shtml

相关文章

超全的Docker学习教程(Linux云计算从入门到精通)

CONTENTS 一、docker简介 1.1 docker相关概念 1.2 docker应用场景 1.3 docker和虚拟机比较 二、初识docker 2.1 安装docker 2.2 初识docker-docker架构 2.3 配置镜像加速器 三、docker命令详解 四、docker容器数据卷 五、docker应用部署 5.1 部署mysql 5.2 部署Tom…

Docker 从入门到精通(新手建议收藏的教程)

今天给大家分享一篇小白也能看懂的Docker入门到精通学习教程&#xff0c;篇幅较长&#xff0c;但内容很干&#xff0c;值得认真看完&#xff01; 目录 一 、容器简介 二、什么是 Docker&#xff1f; 三、安装Docker Docker 从入门到精通&#xff08;新手建议收藏的教程&am…

Docker入门教程(详细)

目录 一、Docker概述 1.1 Docker 为什么出现&#xff1f; 1.2 Dorker历史 1.3 能做什么 虚拟机技术&#xff1a;&#xff08;通过 软件 模拟的具有完整 硬件 系统功能的、运行在一个完全 隔离 环境中的完整 计算机系统&#xff09; 容器化技术&#xff1a;&#xff08;容…

docker入门,这一篇就够了。

Docker入门&#xff0c;这一篇就够了。 Docker容器虚拟化平台。 前言 接触docker很长时间了&#xff0c;但是工作中也没有用到&#xff0c;所以总是学了忘&#xff0c;忘了学。不过这次&#xff0c;我打算跟大家分享一下我的学习历程&#xff0c;也算是我的独特的复习笔记&…

总线板卡(1)——总线接口类型

行业的朋友们是否碰到过这种情况&#xff0c;比如你问某厂家是否有1553B总线或者其他总线板卡时&#xff0c;对方会问你要什么接口的&#xff1f; 你知道厂家说的接口指的是什么吗&#xff1f; 这里的接口一般指板卡的总线接口&#xff0c;比较普遍的有PCI、PCIe、CPCI、PXI等…

6U VPX架构XCKU115(FPGA)+XCZU9EG(MPSOC)+TMS320C6678(DSP)的高速信号处理平台VPX630设计原理图及调试经验分享

板卡概述VPX630 是一款基于6U VPX 总线架构的高速信号处理平台&#xff0c;该平台采用一片Xilinx 的Kintex UltraScale 系列FPGA&#xff08;XCKU115&#xff09;作为主处理器&#xff0c;完成复杂的数据采集、回放以及实时信号处理算法。采用一片带有ARM 内核的高性能嵌入式处…

flexray VPX控制板设计方案详细

后IO板 1设计要求1.1功能要求3U VPX通讯板具有4路CAN&#xff0c;2路 Flex Ray、1路SGMII网口、2路RapidIO2、2路PCIE4、2路IPMI接口 整个处理模块系统框图如下&#xff1a; 图1 系统框图 根据上图&#xff0c;模块可以分为以下几个部分&#xff1a; CAN协议模块&#xff1a…

嵌入式高速串行并行技术_推荐(张锋)

前言 之前想学习一下总线相关的知识&#xff0c;就去图书馆搜&#xff0c;其中&#xff0c;有一本是&#xff1a;《嵌入式高速串行并行技术——基于FPGA实现与应用&#xff08;张锋著&#xff09;》 看了一下前言、目录、自序、以及他本书创作过程中的随笔&#xff08;小编就决…

加固机箱设计资料第289篇:基于3U VPX的 5槽加固机箱

基于3U VPX的 5槽加固机箱 一、产品简介 VPX-305 机箱平台是4U高度 3U 5S的一种便携式VPX机箱。由北京太速科技研发&#xff0c;机箱提供1个VPX总线系统槽和4个VPX 外设槽。主要用于组建VPX测试系统。整机美观大方、小巧灵活、安全可靠。可用于外场测试。 VPX-30…

VPX加固机箱学习资料第289篇:基于3U VPX的 5槽加固机箱

基于3U VPX的 5槽加固机箱 一、产品简介 VPX-305 机箱平台是4U高度 3U 5S的一种便携式VPX机箱。机箱提供1个VPX总线系统槽和4个VPX 外设槽。主要用于组建VPX测试系统。整机美观大方、小巧灵活、技术先进、安全可靠。可用于外场测试。 VPX-305采用工业级3U300W的C…

基于龙芯+国产FPGA 的VPX以太网交换板设计(二)

3.1 板卡技术要求 3.1.1 主要性能指标 本着向下兼容的原则&#xff0c;以太网交换板的设计尽量保留传统信息处理平台的基本功 能和接口&#xff0c;重点考虑提升设备的性能和扩展性。本课题以太网交换板的主要性能指标 如下&#xff1a; &#xff08; 1 &#xff09; 具…

3U VPX板卡设计

最近设计了一块3U VPX CPU板卡&#xff0c;具体硬件设计过程如下&#xff1a; 1&#xff1a;首先了解3U VPX的相关标准&#xff0c;包括板卡尺寸&#xff0c;接插件定义等等&#xff1b; 2&#xff1a;确定板卡要实现的功能&#xff0c;此板卡包含1553B、RS422、CAN总线、IO输入…

基于6U VPX架构的6槽标准VPX机箱

VPX6100是北京青翼科技的一款基于6U VPX总线架构的高性能、高可靠性的应用系统平台&#xff0c;支持VPX、OpenVPX协议标准。该系统平台采用高性能6槽6U VPX背板&#xff0c;高度优化的拓扑结构&#xff0c;能够为用户提供各种高速串行总线的互联&#xff0c;该平台支持标准VPX插…

基于龙芯+国产FPGA 的VPX以太网交换板设计(三)

调试与测试是本系统设计实现的重要环节。单板调试主要包括各单元电路和接口 的调试&#xff0c;主要通过查看信号波形和运行软件对每个功能进行测试。本章将设计一系列 的调试和测试方案来验证电路设计的正确性。 6.1 电路板静态检查 经过原理图设计、印制板设计、制造、印…

什么是VPX技术?

北京太速科技有限公司 自主研发VPX板卡 http://www.orihard.com/ 欢迎关注 新型VPX(VITA 46)标准是自从VME引入后的25年来,对于VME总线架构的最重大也是最重要的改进。它将增加背板带宽,集成更多的I/O,扩展了格式布局。 目前,VME64x已经不能满足国防和航空领域越来越高…

6U VPX 电源产品学习资料第411篇:基于6U VPX的700W/1400W 电源产品

基于6U VPX的700W/1400W 电源产品 1400W六路输出AC-DC 6U VPX电源 一、功能指标 1&#xff0e;完全符合VITA62 6U 标准 2. 交流宽电压输入85V-264VAC. 3. 输入与输出隔离电压2000V. 4. 高效率≥86%&#xff08;220V&#xff09;&#xff0c;≥83%&…

【VS开发】【电子电路技术】VPX技术介绍

VPX技术介绍 杨跃江 2009-12-18 杨跃江 13902479857 中科祥云&#xff08;深圳&#xff09;信息产业有限公司 1VPX 技术 新型VPX(VITA 46)标准是自从VME引入后的25年来&#xff0c;对于VME总线架构的最重大也是最重要的改进。它将增加背板带宽&#xff0c;集成更多的I/O&#x…

[VPX611]基于 6U VPX 总线架构的SATA3.0 高性能数据存储板

板卡概述 VPX611 是一款基于6UVPX 总线架构的高性能数据存储板&#xff0c;该板卡采用2 片XilinxKintex-7 系列FPGA 作为主控单元&#xff0c;FPGA 内嵌RAID 控制器&#xff0c;最大支持8 个mSATA 盘&#xff0c;最大存储容量可以达到8TByte&#xff0c;持续数据写入带宽可以达…

3U VPX 总线架构+ 2片国防科大银河飞腾 FT-M6678 多核浮点运算 DSP 设计资料--VPX303

板卡概述 VPX303 是一款基于 3U VPX 总线架构的高性能信号处理板&#xff0c;板载 2 片国防科大银河飞腾 FT-M6678 多核浮点运算 DSP&#xff0c;可以实现各 种实时性要求较高的信号处理算法。 板卡每个 DSP 均支持 5 片 DDR3 SDRAM 实现数据缓存&#xff0c;两片 DSP 之…

【VPX302】基于3U VPX总线架构的高性能数据预处理平台/XCKU115

板卡概述 VPX302是一款基于3U VPX总线架构的高性能数据预处理FMC载板&#xff0c;板卡具有1个FMC&#xff08;HPC&#xff09;接口&#xff0c;1个X8 GTH背板互联接口&#xff0c;可以实现1路PCIe x8&#xff1b;具有4路SRIO X4。板卡采用Xilinx的高性能Kintex UltraScale系列F…