docker基础知识/尚硅谷docker学习笔记
nanshan 2025-07-27 22:33 3 浏览 0 评论
最近看了好多docker的资料,找了一些尚硅谷docker的教学视频,大概总结了一下前前后后的学习笔记。分享给大家。
安装
Docker的基本组成
镜像
Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
容器
Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。
它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
仓库
仓库(Repository)是集中存放镜像文件的场所。
仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub(https://hub.docker.com/),
存放了数量庞大的镜像供用户下载。包括国内的公开仓库包括阿里云 、网易云 等
总结
需要正确地理解仓储/镜像/容器这几个概念:
Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎 image镜像文件。只有通过这个镜像文件才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
* image 文件生成的容器实例,本身也是一个文件,称为镜像文件。
* 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器
* 至于仓储,就是放了一堆镜像的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了。
安装步骤
centos6和7 过程不太一样
我本地有docker,所以该章节没有验证过
以centos7为例
1、虚拟机上网。。。
2、yum安装gcc,
yum -y install gcc
yum -y install gcc-c++
3、卸载旧版本
yum -y remove docker docker-common docker-selinux docker-engine
新版本看官网卸载办法
4、安装需要的软件包:yum intall -y yum-utils device-mapper-persistent-data lvm2
5、设置stable镜像仓库:yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6、更新yum软件包索引:yum makecache fast
7、安装Docker CE,yum -y install docker-ce
8、启动docker,systemctl start docker && systemctl enable docker
9、测试:
docker version
docker run hello-world
10、配置镜像加速器:
mkdir -p /etc/docker
vim /etc/docker/daemon.json
systemctl daemon-reload
systemctl restart docker
11、卸载
systemctl stop docker
yum -y remove docker-ce
rm -rf /var/lib/docker
命令
帮助命令
docker version
docker info
docker --help
镜像命令
docker images
docker search
docker search [某个镜像的名称]
docker search [options] 镜像名称
options:
--no-tranc:显示完整的镜像描述
-s:列出收藏数不小于指定值的镜像
--automated:只列出automated build类型的镜像
docker pull 镜像名称
docker rmi hello-world/
删除全部镜像:docker rmi -f $(docker images -qa)
容器命令
新建并启动容器:
docker run [options] IMAGE [command] [arg...]
options:
--name="容器新名称" 为容器指定一个名称
-d:后台运行容器,并返回容器ID,即启动守护式容器
-i:以交互模式运行容器,通常与-t同时使用
-P:随机端口映射
-p:指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPORT:containerPort
containerPort
列出当前正在运行的容器:docker ps 【options】
options:
-a:列出当前正在运行的容器+历史上运行过的
-l:显示最近创建的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号
--no-trunc:不截断输出
退出容器:
exit:容器停止退出
ctrl+P+Q:容器不停止退出
启动容器:docker start 容器ID或名称
重启容器:docker restart 容器ID或名称
停止容器:docker stop 容器ID或名称
强制停止容器:docker kill容器ID或名称
删除已停止的容器:
docker rm 容器ID
docker rm -f $(docker ps -a -q)
docker ps -a -q|xargs docker rm
重要:
启动守护式容器:docker run -d 容器名
#使用镜像centos:latest以后台模式启动一个容器
docker run -d centos
问题:然后docker ps -a 进行查看, 会发现容器已经退出
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动响应的service即可。例如
service nginx start
但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,
这样的容器后台启动后,会立即自杀因为他觉得他没事可做了.
所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行
查看容器日志:docker logs -f -t 容器ID/docker logs -f -t --tail n 容器ID
查看容器内运行的进程:docker top 容器ID
查看容器内部的细节:docker inspect 容器ID
进入正在运行的容器并以命令行交互:
docker exec -it 容器ID /bin/bash
重新进入:docker attach 容器ID
从容器内拷贝文件到主机上:docker cp 容器ID:容器内路径 目的主机路径
Docker镜像
UnionFS-联合文件系统
是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
端口映射
docker run -it -p 8888:8080 tomcat:latest
-p:主机端口号:docker容器端口号
-P:随机端口号
docker commit
以当前运行的docker作为实例复制一个副本镜像
docker commit -a="作者" -m=“备注信息” 运行实例的容器ID 复制副本镜像名称:自定义版本
docker commit -a="swz" -m="tomcat with docs" bdc80ace28e0 swz/tomcat:1.2
docker容器的数据卷
概念
是什么:内存的数据保存到磁盘,容器关闭,数据保存到数据卷中;
干什么:数据持久化,容器之间的集成和持久化;容器到主机,主机到容器的数据共享
相当于容器的外置磁盘
数据卷
命令添加
1、docker run -it -v /宿主机绝对路径:/容器内路径 镜像名称
docker run -it -v /myDataVolume:/dataVolumeContainer centos //主机和容器内的目录都是自动创建的 -v有新建的功能
docker inspect 容器ID,可以看到挂载效果
容器内外修改文件都可以实现同步,容器停止运行,主机修改文件后,容器下次运行会加载修改结果
2、指定数据卷权限
docker run -it -v /myDataVolume:/dataVolumeContainer:ro centos
Dokerfile添加
VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
说明:
出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。
由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。
容器会自动在内部创建VOLUME指定的目录,因为不能指定主机目录,docker会自动创建主机对应的目录,通过docker inspect 容器ID,可以查看对应的目录
数据卷容器--volumes-from
docker run -it --name dc02 --volumes-from dc01 swz/centos
1、启动一个有数据卷的父容器
2、创建一个新的容器,制定数据卷来自的父容器
3、子容器和父容器之间实现数据卷共享
Dockerfile
概念
1、Dockerfile是构建Docker镜像的构建文件,是一系列命令和参数构成的脚本
2、三步骤:编写Dockerfile,docker build ... ,docker run ...
3、centos例子:centos8-Dockerfile
Dockerfile构建过程解析
基础知识
1、每条指令必须以大写字母开头,且后面要跟随至少一个参数
2、从上到下,顺序执行
3、#注解
4、每条指令都会创建一个新的镜像层,并对镜像层进行提交
执行流程
1、docker从基础镜像运行一个容器
2、执行一条制定对容器作出修改
3、执行类似docker commit 的操作提交一个新的镜像层
4、docker再基于刚提交的镜像运行一个新的容器
5、执行Dockerfile中的下一条执行,循环2-3-4步骤,直到所有指令都执行完成
总结
从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,
* Dockerfile是软件的原材料
* Docker镜像是软件的交付品
* Docker容器则可以认为是软件的运行态。
Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
1 Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;
2 Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时,会真正开始提供服务;
3 Docker容器,容器是直接提供服务的。
Dockerfile指令
FROM
基础镜像,当前新景祥是基于哪个镜像的
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
容器构建时需要运行的命令
EXPOSE
当前容器对外暴露的端口
WORKDIR
制定的创建容器后,默认登陆进来的工作目录,一个落脚点
ENV
用来构建镜像过程中设置环境变量
ENV MY_PATH /usr/mytest
这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;
也可以在其它指令中直接使用这些环境变量,
比如:WORKDIR $MY_PATH
ADD
将宿主机目录下的文件拷贝进镜像,且ADD命令会自动处理URL和解压tar压缩包
COPY
类似ADD,拷贝文件和目录到镜像中,将从构建上下文目录中<源路径>的文件/目录复制到新的一层镜像内的<目标路径>位置
COPY ser dest
COPY ["src","dest"]
VOLUME
容器数据卷,用户数据保存和持久化工作
CMD
指定一个容器启动时要运行的命令
Dockerfile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT
指定一个容器启动时要运行的命令
ENTRYPOINT的目的和CMD一样,都是指定容器启动程序及参数
ONBUILD
当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
总结
案例
Base镜像(scratch)
Docker hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的
自定义镜像mycentos
1、现状:登录根目录,vim,ifconfig都不存在
编写Dockfile
FROM centos
MAINTAINER swz<swz016@163.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
docker build -t mycentos:1.3 .
docker run -it mycentos:1.3
docker history 镜像ID
CMD/ENTRYPOINT镜像案例
1、都是指定一个容器启动时要运行的命令
2、CMD:
I)Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换
II)docker run -it -p 8888:8080 tomcat 正常情况下会运行tomcat,看到日志;
docker run -it -p 8888:8080 tomcat ls -l 列出文件目录,tomcat不会运行
3、ENTRYPOINT:
I)docker run之后的参数会被当做参数传递给ENTRYPOINT,之后形成新的命令组合
II)Case:制作CMD版可以查询IP信息的容器
自定义镜像Tomcat9
1、mkdir -p /root/mydocker/mytomcat
2、将jdk和tomcat的安装压缩包拷贝进上一步的目录
3、编写Dockerfile
FROM centos
MAINTAINER swz<swz0613@163.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY readme.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u73-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.24.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_73
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.24
ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.24
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-8.5.24/bin/startup.sh" ]
#CMD ["/usr/local/apache-tomcat-8.5.24/bin/catalina.sh","run"]
# CMD ["sh","/usr/local/apache-tomcat-8.5.24/bin/startup.sh"]
CMD /usr/local/apache-tomcat-8.5.24/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.24/bin/logs/catalina.out
4、docker build -t swz/tomcat:1.3 .
5、docker run -d -p 9080:8080 --name swztomcat -v /root/mydocker/mytomcat/apps01:/usr/local/apache-tomcat-8.5.24/webapps/apps01 -v /root/mydocker/mytomcat/logs/:/usr/local/apache-tomcat-8.5.24/logs --privileged=true swz/tomcat:1.3
总结
Docker常用安装
总体步骤
搜索镜像
拉取镜像
查看镜像
启动镜像
停止容器
移除容器
安装tomcat
1、docker hub上查找tomcat镜像
docker search tomcat
2、从docker hub上拉取镜像到本地
docker pull tomcat
3、docker images查看是否拉取到想要的tomcat
4、使用tomcat镜像创建容器(运行镜像)
docker run -it -p 8080:8080 tomcat
安装mysql
1、docker hub上查看mysql镜像
2、从docker hub上拉取mysql镜像到本地标签为5.6
3、使用mysql5.6镜像创建容器
docker run -p 12345:3306 --name mysql -v /zzyyuse/mysql/conf:/etc/mysql/conf.d -v /zzyyuse/mysql/logs:/logs -v /zzyyuse/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
命令说明:
-p 12345:3306:将主机的12345端口映射到docker容器的3306端口。
--name mysql:运行服务名字
-v
/zzyyuse/mysql/conf:/etc/mysql/conf.d :将主机/zzyyuse/mysql录下的conf/my.cnf 挂载到容器的 /etc/mysql/conf.d-v /zzyyuse/mysql/logs:/logs:将主机/zzyyuse/mysql目录下的 logs 目录挂载到容器的 /logs。
-v
/zzyyuse/mysql/data:/var/lib/mysql :将主机/zzyyuse/mysql目录下的data目录挂载到容器的 /var/lib/mysql-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
-d mysql:5.6 : 后台程序运行mysql5.6
docker run -p 3306:3306 --name mysql -v /root/mydocker/mysql/conf:/etc/mysql/conf.d -v /root/mydocker/mysql/logs:/logs -v /root/mydocker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
4、mysql的数据库备份
docker exec myql服务容器ID sh -c ' exec mysqldump --all-databases -uroot -p"123456" ' > /zzyyuse/all-databases.sql
安装redis
1、从docker hub上拉取redis镜像到本地标签为3.2
2、使用镜像
3、在主机目录下新建redis.conf文件
4、docker run -p 6379:6379 -v /root/mydocker/redis/data:/data -v /root/mydocker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
安装NGINX
1、docker pull nginx:1.17
2、在相关目录下先创建nginx.conf文件,不然会报错
3、docker run -d -p 8082:80 --name nginx-test -v /root/mydocker/nginx/www:/usr/share/nginx/html -v /root/mydocker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/mydocker/nginx/logs:/var/log/nginx nginx:1.17
本地镜像发布到阿里云
本地镜像发布到阿里云流程
镜像的生成方法
1、先运行容器:docker run -it mycentos(镜像名称)
2、提交容器镜像:
docker commit -a swz -m "test centos 1.4 from 1.3 " 0344b515c925 swz/centos:1.4
将本地镜像推送到阿里云
将阿里云的镜像下载到本地
阿里云上创建镜像之后,官网上都有说明,不再补充
相关推荐
- 基于 Linux 快速搭建企业级 DNS 服务器(Bind9 ...
-
一、引言在大型企业网络或自建系统中,搭建一套高可用、自控的DNS解析服务器至关重要。本文将带你基于Linux环境,从零搭建企业级DNS服务平台,采用Bind9实战配置,确保解析稳定、安...
- Linux无法解析域名的解决办法(linux无法解析域名的解决办法有哪些)
-
如果由于误操作,删除了系统原有的dhcp相关设置就无法正常解析域名。 此时,需要手动修改配置文件: /etc/resolv.conf 将域名解析服务器手动添加到配置文件中 该文件是DNS域名解...
- 在centos7 创建基于域名的虚拟主机nginx服务器
-
直接用ip地址访问首先是不安全,其次不太容易记住,如果你的服务器上的项目有很多个,你创建多个基于Ip的虚拟主机,很容易导致公网ip冲突或乱用的情况。这时候我们就可以选择基于域名的虚拟主机。第一步、安装...
- Linux之DNS服务(linux dnsserver)
-
一、学习路线如下二、DNS介绍1.域名的概念域名由特定的格式组成,用来表示互联网中某一台计算机或者计算机组的名称,能够使人更方便的访问互联网,而不用记住能够被机器直接读取的IP地址。2.DNS(dom...
- Linux环境下DNS服务器配置图文详细教程
-
测试环境为vmware虚拟机下,linux系统为RedHatEnterpriseLinuxServer6.0(Santiago),内核版本Linux2.6.32-71.el6.i686...
- 构建基于 Linux 的高性能 DNS 服务器
-
在现代网络架构中,DNS(域名解析)是访问互联网的关键环节。搭建一个高性能、低延迟、可缓存加速的私有DNS服务器,不仅可以提升访问速度,还能增强网络隐私和安全性。本文将基于Linux系统,详细...
- 从运维的角度带你初识neo4j图形数据库的安装及配置
-
前言随着公司业务架构的改变,以前我部署环境的时候,一般只是部署Mysql,jdk,tomcat即可,现在还要部署一些nosql,如redis,neo4j,在之前从来没了解过,随着学习的深入而做了一些笔...
- [超全整理] Java 程序员必备的 100 条 Linux 命令大全
-
一、基础操作(10条)#1.ls-查看目录内容ls-l#长格式显示文件和目录ls-a#显示隐藏文件ls-lh#带单位显示文件大小#2.cd-切换目录...
- 软件测试|一文教你轻松搭建docker环境
-
前言Docker提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个Do...
- docker基础知识/尚硅谷docker学习笔记
-
最近看了好多docker的资料,找了一些尚硅谷docker的教学视频,大概总结了一下前前后后的学习笔记。分享给大家。安装Docker的基本组成镜像Docker镜像(Image)就是一个只读的模板。镜...
- 前端_react项目从windows部署到centos
-
前言:从工程角度来讲,本地开发完就要把项目部署到生产环境,此过程的快慢也直接影响着整体的效率。所以也有很多人做持续集成的工作,例如:CI/CD/一键部署。但对于个人开发者而言,如果能有工具支撑是最好的...
- Springboot项目使用docker部署(docker中运行springboot项目)
-
环境:SpringBoot2.2.10.RELEASE+Docker+Centos7+JDK8安装配置Dockeryum包更新到最新yumupdate卸载旧版本dockeryumre...
- Spring Boot 3.x + Redis 7.x,轻松掌握Redisson分布式锁实战技巧
-
大家好,我是袁庭新。在分布式环境中,确保数据的一致性和正确性是至关重要的。对于需要高性能、高并发和分布式数据存储的应用程序来说,Redisson是一个很好的选择。同时,Redisson提供的分布式锁功...
- Docker篇(二):Docker实战,命令解析
-
大家好,我是杰哥上周我们通过几个问题,让大家对于Docker有了一个全局的认识。然而,说跟练往往是两个概念。从学习的角度来说,理论知识的学习,往往只是第一步,只有经过实战,才能真正掌握一门技术所以,本...
- 新手快速入门Docker,轻松掌握Docker安装与使用
-
安装使用官方安装脚本自动安装curl-fsSLhttps://get.docker.com|bash-sdocker--mirrorAliyun手动安装CentOS7(使用yum进...
你 发表评论:
欢迎- 一周热门
-
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
手机如何设置与显示准确时间的详细指南
-
NAS:DS video/DS file/DS photo等群晖移动端APP远程访问的教程
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
如何修复用户配置文件服务在 WINDOWS 上登录失败的问题
-
一加手机与电脑互传文件的便捷方法FileDash
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)