Docker笔记

1、Docker安装

1.1 查看内核版本

uname -r
查看linux系统的系统内核,推荐3.10以上版本。

1.2.查看系统版本

cat /etc/os-release 在这里插入图片描述

1.3 安装

  • 在安装前最好先更新yum软件包索引:yum makecache fast
  • 需要的安装包:yum install -y yum-utils
  • 设置镜像仓库:yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 安装docker:systemctl start docker
  • 启用docker:systemctl start docker
  • 查看docker是否安装成功,查看版本:docker version
  • 运行hello-world:docker run hello-world
  • 查看一下hello-world:docker images

1.4 卸载docker

  • 卸载依赖:yum remove docker-ce docker-ce-cli containerd.io
  • 删除资源:rm -rf /var/lib/docker

1.5 docker run hello-world的整体流程

在这里插入图片描述
run以后,Docker在本机寻找hello-world这个镜像,如果有,直接运行,如果没有,去docker hub上去下载。下载又有两种情况:(1)找不到,返回错误提示信息(2)下载到本地,然后在本地能找到hello-world这个镜像了,运行这个镜像。

2、底层原理

2.1 Docker是怎么工作的?

Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问。
Docker_Server接收到Docker_Client的指令,就会执行这个命令。
在这里插入图片描述

2.2 Docker为什么比VM快?

  • Docker有着比虚拟机更少的抽象层
  • Docker利用的是宿主机的内核,VM需要的是Guest OS
    在这里插入图片描述
    所以说,新建一个容器的时候,Docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载Guest OS,分钟级别的,而docker是利用宿主机的操作系统,省略了这个复杂过程,

3、Docker的常用命令

3.1 帮助命令

docker version 查看docker版本信息
docker info 更详细的一些docker信息
docker --help帮助命令
帮助文档的地址:命令行帮助文档

3.2 镜像命令

3.2.1 docker images查看所有镜像

在这里插入图片描述
其中:

  • REPOSITORY:镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像的ID
  • CREATED:镜像的创建时间
  • SIZE:镜像的大小
    docker images --Options
    Options:
  • a:显示全部的镜像
  • q:只显示镜像的id

3.2.2 docker search搜索镜像

在这里插入图片描述
可通过stars来过滤
在这里插入图片描述

3.2.3 docker pull下载镜像

[wangxi@aisvr ~]$  docker pull python:3.7
3.7: Pulling from library/python    #不写版本号,默认下载最新版
d960726af2be: Already exists #分层下载,docker image的核心 联合文件系统
e8d62473a22d: Already exists 
8962bc0fad55: Already exists 
65d943ee54c1: Already exists 
532f6f723709: Already exists 
1334e0fe2851: Already exists 
ba365db42d14: Pull complete 
9c5512e22a86: Pull complete 
9b39d3d20df6: Pull complete 
Digest: sha256:2418d2580b0696cfe3e924ada34478dc30e5dbdf2cfd06158a3553e4608aae53   #签名
Status: Downloaded newer image for python:3.7
docker.io/library/python:3.7     #下载的真实地址

#docker pull python:3.7 等价于 docker pull docker.io/library/python:3.7 

3.2.4 docker rmi -f 镜像ID 强制删除镜像

删除多个镜像:

docker rmi -f 镜像ID1 镜像ID2 镜像ID3

删除所有镜像:

docker rmi -f $(docker images -aq) #依据镜像的ID进行递归删除

3.3 容器命令

说明:有了镜像才可以创建容器

3.3.1 新建容器并启动进入

docker run [可选参数] image
"""
可选参数:
--name='Name'  #容器名字
-d   #后台方式运行
-it  #使用交互方式进行  一般还会再最后加上/bin/bash 进入交互界面
-p 主机端口:容器端口   #指定容器端口  可接多个端口,一个-p可设置一个端口映射
-P  #随机指定端口
"""

3.3.2 列出所有运行的容器

docker ps [参数] #查看当前运行的容器
"""
  :列出当前运行的容器
-a:列出当前运行的容器+历史运行过的容器
-n=?:最近创建的?个容器
-q:只显示容器的编号
"""

3.3.3 退出容器

exit  #直接停止容器并退出
ctrl+P+Q #容器不停止退出

3.3.4 删除容器

docker rm 容器id   #删除指定容器
docker rm if $(docker ps -aq)   #删除所有容器
dockers ps -a -q|xargs docker rm   #删除所有容器

3.3.5 启动和停止容器的操作

docker start 容器id      #启动容器
docker restart 容器id    #重启容器
docker stop 容器id       #停止容器
docker kill 容器id       #强制停止容器

3.4 常用其他命令

3.4.1 后台启动容器

docker run -d 镜像名

3.4.2 查看日志

docker logs

3.4.3 查看容器中的进程信息

docker top 容器id

3.4.4 查看容器的元数据

docker inspect 容器id

3.4.5 进入当前正在运行的容器

#通常容器都是后台运行的,需要进入容器,修改一些配置
#方式1,进入容器后开启一个新的终端,可以在里面操作(常用)
docker exec -it 容器id /bin/bash    
#方式2,进入容器正在执行的终端,不会启动新的进程
docker attach 容器id

3.4.6 从容器内拷贝文件到主机

docker cp 容器id:容器内路径 目的地主机路径

3.4.7 查看cpu状态

docker stats

3.5 小结

在这里插入图片描述

3.6 小案例1

安装tomcat

  1. 下载tomcat
    docker pull tomcat
    查看一下:
    docker images
    结果为:
    在这里插入图片描述

  2. 启动运行
    docker run -d -p 3355:8080 --name tomcat_test tomcat
    -d 后台运行,-p将tomcat的8080端口和服务器的3355端口进行连接,–name 取名为tomcat_test

  3. 在外网访问
    在这里插入图片描述

  4. 进入镜像查看
    docker exec -it tomcat_test /bin/bash
    在这里插入图片描述
    随后进入webapps发现里面没有任何文件,从而导致了访问网站没有页面显示。
    原因:直接pull。默认安装最小的最新的镜像,所有不必要的都剔除了。只保证最小可运行的环境。

  5. 将webapps.list文件复制到webapps里
    cp -r webapps.dist/* webapps

  6. 有页面了
    在这里插入图片描述
    思考:我们以后要部署项目,每次进行修改都需要进入容器是不是很麻烦?要是可以在容器外部提供一个映射路径,在外部放置项目,就自动同步到内部就好了

4、Docker镜像讲解

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件。

4.1 commit镜像(提交镜像)

如果你想要保存当前容器的状态,就可以通过commit来提交,获得一个镜像。
docker commit -m='提交的描述信息' -a=’作者‘ 容器id 目标镜像名:[TAG]
目标镜像名自己取。

先查看现有容器:

在这里插入图片描述
commit镜像:
在这里插入图片描述
创建一个名称为python3.7的镜像,版本为1.0,作者是‘wangxi’。
查看现有镜像:
在这里插入图片描述

5、容器数据卷

5.1 什么是容器数据卷

docker理念回顾:将应用和环境打包成一个镜像!
但是此时,数据都在容器中,那么删除容器,数据就会丢失!需求:数据可以持久化所以需要容器之间可以有一个数据共享的技术。docker容器产生的数据,同步到本地!这就是卷技术!
目录的挂载,将容器内的目录,挂载到Linux上面!
总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的。

5.2 体验使用容器数据卷

5.2.1 方式1:直接使用命令来挂载 -v

查看现有镜像:
在这里插入图片描述
挂载:docker run -it -v 主机目录:容器目录 image id /bin/bash
只能使用image id不能再使用repository替代。
在这里插入图片描述
将 4fe8dd68fa7d这个镜像的home目录文件后台挂载到主机test目录。
使用inspect查看具体信息:docker inspect 8cfe51fa95ea
可以查看到相关的挂载信息。
在这里插入图片描述
在容器内进行数据修改:
在这里插入图片描述
在容器内的home目录下新建了一个test_data.py文件,此时在linux主机的test文件里:
ls
只要容器未删除(可以取消服务),在主机上对文件内容进行修改,docker容器中的文件也会做相应修改。
可能公司处于安全考虑,对于从容器中映射到主机上的文件,用户只有只读权限

5.3 具名挂载和匿名挂载

5.3.1 -v 使用

当使用-v进行挂载时,如果没有写主机路径,只接了容器路径,系统会自动设置一个映射路径。
docker volume +【参数】
在这里插入图片描述
docker run -d -v 容器映射名:容器
在挂载时,若-v 映射名:容器路径,这种有映射名的就是具名挂载,可使用docker volume inspect 容器映射名查看该数据到底存放在哪里。
在这里插入图片描述
所有的docker容器内的卷,没有指定目录的情况下,都是在/var/lib/docker/volumes路径下。

5.3.2 具名挂载、匿名挂载、指定路径挂载

-v 容器内路径  		#匿名挂载
-v 卷名:容器内路径	#具名挂载
-v /宿主机路径:容器内路径	#指定路径挂载

拓展:

docker run -d --name nginx02 -v juming-nginx:/etc/nginx:ro nginx

在容器路径后面出现了一个ro或者rw,是改变读写权限的。
ro:read only,只能通过宿主机进行文件更改操作
rw:read write

5.3.3 容器间进行数据共享

容器间可以实现数据挂载进而实现数据共享
docker run -it --name 容器2 --volumes-from 容器1 镜像id
注意:需要容器1本身存在挂载的数据卷。

6、Dockerfile

Dockerfile就是用来构建docker镜像的构建文件。

6.1 体验

6.1.1 创建一个dockerfile文件

创建一个dockerfile
内容为:

FROM python:3.8

VOLUME ['dockerfile_volume1']

CMD echo '----end----'
CMD /bin/bash

项目参考Dockerfile:

FROM python:3.7-slim
COPY . /app
WORKDIR /app
RUN pip install --no-cache-dir -r requirements.txt && \ 
    mv data /root/.dgl
EXPOSE 8041
CMD python main.py

其中:
python:3.8 为想创建的镜像,版本号进dockerhub中查找。
VOLUME 为匿名挂载卷

6.1.2 创建一个镜像

docker build -f dockerfile1 -t python_wang .

其中:
-f 后的dockerfile1 为dockerfile
-t 后的python_wang 为镜像名称
. 是生成在当前目录下
随后运行起来,可使用docker inspect 容器id查看镜像的挂载情况。
在这里插入图片描述

6.2 构建步骤

  • 编写一个dockerfile文件
  • docker build 构建一个镜像
  • docker run 运行镜像
  • docker push 发布镜像

6.2.1 Dockerfile构建过程

基础知识:

  • 每个保留关键字(指令)都必须是大写字母
  • 执行从上到下执行
  • #表示注释
  • 每一个指令都会创建提交一个新的镜像层,并提交!
    步骤:
    Dockerfile:构建文件,定义了一切的步骤、源代码
    DockerImage:通过Dockerfile构建生成的镜像,最终发布和运行的产品
    Docker容器:容器就是镜像运行起来提供服务的

6.2.2 Dcokerfile的指令

在这里插入图片描述

FROM	#基础镜像,一切从这里开始
MAINTAINER	#镜像是谁写的,姓名+邮箱
RUN	#构建镜像时需要运行的命令
ADD	#步骤:tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR	#镜像的工作目录
VOLUME	#挂载的目录
EXPOSE	#保留的端口配置
CMD	#指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT	#指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD	#当构建一个被继承Dockerfile 这个时候就会运行 ONBUILD 的指令。触发指令。
COPY	# 类似ADD,将文件拷贝到镜像中
ENV	#构建的时候设置环境变量

拓展:CMD和ENTRYPOINT的不同

Dockerfile

FROM centos
CMD ["ls","-a"]

使用build创建镜像:docker build -f Dockerfile -t cmdtest .
运行该镜像:docker run 镜像id
镜像会执行 ls -a
如果追加指令,如:docker run 镜像id -l
则会报错,系统将Dockerfile中CMD命令改为了 -l,所以找不到这条指令。
而如果Dockerfile最后一行是:ENTRYPOINT [“ls”,"-a"]
build创建镜像并在运行该镜像是追加一条指令 -l
相当于执行了 ls -al

实战:Tomcat 镜像

1、准备镜像文件、tomcat压缩包、jdk的压缩包
在这里插入图片描述
2、编写Dockerfile
Dockerfile是官方命名,build会自动寻找这个文件,就不需要-f 指定文件路径了。
Dockerfile文件内容:

FROM centos  #拉取基础镜像
MAINTAINER 作者名字<邮箱>

COPY readme.txt /usr/local/readme.txt #将当前文件夹下的readme.txt复制到镜像的/usr/local/路径下

ADD jdk-8ull-linux-x64.tar.gz /usr/local #将jdk压缩文件解压到镜像的/usr/local/目录下
ADD apache-tomcat-9.0.22.tar.gz /usr/local #将tomcat压缩文件解压到镜像的/usr/local/目录下

RUN yum -y install vim #让基础镜像拥有vim功能

ENV MYPATH /usr/local	#设置环境变量
WORKDIR $MYPATH		#设置工作目录

EXPOSE 8080 	#暴露8080端口

6.3 发布镜像到DockerHub

1、在dockerhub注册账号
2、确定这个账号可以登录
3、在服务器提交镜像
4、登陆完毕提交镜像

在服务器登录docker
docker login -u 账号
随后会提示你输入密码
随后docker push REPOSITORY:TAG
若出现已存在版本
可使用docker tag 镜像id 新的镜像名称:版本号然后提交新的镜像。

6.4 发布到阿里云镜像

在这里插入图片描述
在这里插入图片描述
实际使用:
(1)登录指定docker镜像仓库
在这里插入图片描述
(2)

7、Docker所有流程

在这里插入图片描述
将镜像打包成压缩文件:
docker save 镜像id -o 文件名.tar
可以再压缩(非必要):
gzip 文件名.tar
如何加载打包好的docker tar包:
docker load tar包

8、Docker网络

在这里插入图片描述
其中,lo为本机回环地址,eth0为内网地址,docker0为docker0地址。
每启动一个docker容器,docker就会给这个容器分配一个ip,并且本地也会生成一个网卡与之对应(veth_pair技术)。
容器之间虽然是隔离的,但容器间的网络是通过桥接模式进行连通的。
在这里插入图片描述
所有的容器在不指定网络的情况下,都是通过docker0进行路由的,docker会给容器分配一个默认的可用IP。
在这里插入图片描述
Docker中的所有网络接口都是虚拟的。虚拟的转发效率高!
只要容器删除,对应的一对网桥就没了。

如果要正常退出不关闭容器,请按Ctrl+P+Q进行退出容器

cx基本使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要下载Docker笔记,首先需要了解Docker是什么以及其使用场景。 Docker是一种开源的容器化平台,可以帮助用户打包、部署和运行应用程序。通过使用容器化技术,用户无需担心运行环境的差异,可以将应用程序和其依赖项打包到一个可移植的容器中,随时在不同的环境中运行。 要下载Docker笔记,可以按照以下几个步骤进行操作: 1. 首先,需要在计算机上安装Docker。可以从Docker官方网站(https://www.docker.com/)上下载适合自己操作系统的Docker安装包,并按照安装指南进行安装。 2. 安装完成后,需要启动Docker服务。根据操作系统的不同,可以在启动菜单或终端中找到Docker应用程序,并点击打开。在Docker控制台中,可以查看、管理容器以及进行其他操作。 3. 接下来,需要搜索并下载Docker笔记的镜像。可以使用Docker Hub(https://hub.docker.com/)这个官方的镜像仓库,搜索关键词以找到合适的笔记镜像。在搜索结果中,会显示镜像的名称、描述、标签等信息,选择一个合适的镜像。 4. 找到想要下载的笔记镜像后,可以使用Docker命令行工具或Docker控制台中的图形界面来下载镜像。通过输入命令`docker pull 镜像名称:标签`,即可下载对应的笔记镜像到本地。 5. 下载完成后,可以使用`docker images`命令在本地查看已下载的镜像列表。根据下载的笔记镜像的名称和标签,可以使用`docker run`命令来创建并启动一个容器,从而运行笔记。 通过以上步骤,就可以成功下载Docker笔记并在本地运行。希望这些信息对您有帮助! ### 回答2: 要下载Docker笔记,首先需要知道从哪里获取这些笔记Docker有一个官方文档网站,其中包含了大量关于Docker的技术文档、教程和示例以及各种使用场景的说明。用户可以访问Docker官方网站,在文档部分进行浏览和搜索,找到所需的笔记。 在Docker官方文档网站上,用户可以按照主题、标签或关键字进行检索,以找到相关的笔记。网站还提供了各种文件格式的下载选项,包括PDF、EPUB和HTML版本,用户可以根据自己的使用习惯选择适合的格式进行下载。 此外,还有一些第三方资源库和网站提供了Docker相关的笔记下载。例如GitHub上有很多开源项目,其中包含了Docker的使用笔记和示例代码。用户可以通过在GitHub上搜索关键字"Docker笔记"或"Docker notes"来找到相关的项目,然后根据项目的说明进行下载。 总之,下载Docker笔记可以通过Docker官方文档网站或第三方资源库进行。用户可以根据自己的需求和偏好选择下载适合自己的格式和来源。 ### 回答3: 要下载 Docker 笔记,首先需要确保已经安装了 Docker 客户端工具。然后按照以下步骤进行下载: 1. 打开终端或命令提示符,输入以下命令来下载 Docker 笔记Docker 镜像: ``` docker pull [镜像名称] ``` 这里的 `[镜像名称]` 是 Docker Hub 上提供的 Docker 镜像名称,可以根据需要搜索并选择合适的镜像。 2. 等待镜像下载完成后,使用以下命令来创建和运行一个 Docker 容器,并将笔记下载到本地: ``` docker run -it --name [容器名称] [镜像名称] [下载命令] ``` 这里的 `[容器名称]` 是用于标识容器的名称,`[下载命令]` 是具体的下载命令,可以根据下载方式的不同进行相应的设置。 3. 等待下载完成后,可以使用以下命令来停止并删除容器: ``` docker stop [容器名称] docker rm [容器名称] ``` 这里的 `[容器名称]` 是之前创建容器时指定的名称。 通过以上步骤,你就可以成功下载 Docker 笔记到本地了。记得根据实际需求选择适合的 Docker 镜像和下载命令,同时也可以通过 Docker Hub 上的文档和社区提供的资源,了解更多有关 Docker 的使用方法和技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值