Docker笔记

Docker笔记(学习视频:B站遇见狂神说

Linux准备

1、安装JDK

# 下载JDK的rmp包
jdk-8u311-linux-x64.rpm

# 安装
rpm -ivh jdk-8u311-linux-x64.rpm
# 配置环境变量
# 1、输入命令 vi /etc/profile
# 2、按下 i ,在最后加入以下代码
unset i
unset -f pathmunge

JAVA_HOME=/usr/java/jdk1.8.0_311-amd64			# 这里的jdk1.8.0_311-amd64需要自己去/usr/java目录下确认,不同版本的JDK都不一样
CLASSPATH=%JAVA_HOME%/lib;%JAVA_HOME%/jre/lib
PATH=$JAVA_HOME/bin;$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME

2、安装Tomcat

# 下载Tomcat的压缩包(.tar.gz)后缀
# 切换到压缩包所在目录
# 解压
tar zxvf apache-tomcat-9.0.54.tar.gz
# 运行tomcat测试
# 1、进去tomcat的bin文件夹,运行startup.sh
[root@localhost bin]# ls
bootstrap.jar                 configtest.sh     shutdown.sh
catalina.bat                  daemon.sh         startup.bat
catalina.sh                   digest.bat        startup.sh
catalina-tasks.xml            digest.sh         tomcat-juli.jar
ciphers.bat                   makebase.bat      tomcat-native.tar.gz
ciphers.sh                    makebase.sh       tool-wrapper.bat
commons-daemon.jar            setclasspath.bat  tool-wrapper.sh
commons-daemon-native.tar.gz  setclasspath.sh   version.bat
configtest.bat                shutdown.bat      version.sh
[root@localhost bin]# ./startup.sh					# 运行
Using CATALINA_BASE:   /download/apache-tomcat-9.0.54
Using CATALINA_HOME:   /download/apache-tomcat-9.0.54
Using CATALINA_TMPDIR: /download/apache-tomcat-9.0.54/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /download/apache-tomcat-9.0.54/bin/bootstrap.jar:/download/apache-tomcat-9.0.54/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

安装

1、确保Linux系统版本在CentOS7以上

2、yum安装gcc相关

yum -y install gcc
yum -y install gcc-c++

3、卸载旧版本

yum remove docker \
          docker-client \
          docker-client-latest \
          docker-common \
          docker-latest \
          docker-latest-logrotate \
          docker-logrotate \
          docker-engine

4、安装需要的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

5、设置镜像仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

6、更新yum软件包索引 (可能会出错,直接跳到下一步即可)

yum makecache fast

7、安装Docker

yum -y install docker-ce docker-ce-cli containerd.io

8、测试启动Docker

systemctl start docker

9、测试

#查看版本
docker version

#运行hello world,一开始没有这个镜像,输入命令后会自动下载
docker run hello-world

#查看镜像
docker images

阿里云镜像加速

四个命令依次在Linux控制台输入即可

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

Docker run 镜像名—的工作流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IFvqiFmf-1637111040994)(file:///C:\Users\Administrator\Documents\Tencent Files\2816710244\Image\C2C\EU4$UOBG7T6LFCV]6]OE0X4.png)]

底层原理

Docker是怎么工作的?

​ Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问!

​ DockerServer接收到Docker-Client的指令,就会执行该指令
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A8RtKYUK-1637111183940)(file:///C:\Users\Administrator\Documents\Tencent Files\2816710244\Image\C2C\UCG4OK8RBNFTH{ZDU{L$5KB.png)]

Docker为什么比虚拟机快?

1、Docker有着比虚拟机更少的抽象层

2、Docker利用的是宿主机的内核,vm需要是Guest OS

在这里插入图片描述

Docker新建一个容器的时候,不需要重新加载系统内核;虚拟机需要加载Guest OS(分钟级别),Docker利用了宿主机的操作系统(秒级),省略了这个复杂的过程

Docker的常用命令

帮助命令
docker version 		#显示docker的版本信息
docker info			#显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help   #帮助命令

帮助文档的地址:Reference documentation | Docker Documentation

镜像命令

docker images 查看所有本地的主机上的镜像

[root@localhost /]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   5 weeks ago   13.3kB

#解释
REPOSITORY	镜像的仓库源
TAG			镜像的标签
IMAGE ID	镜像的id
CREATED		镜像的创建时间
SIZE		镜像的大小

#可选项
	-a, --all		#列出所有镜像
	-q, --quiet		#只显示镜像的id

docker rmi 镜像id 删除指定id的镜像(删之前要先把对应的container删除,因为该镜像可能被container引用

也可以直接使用 docker rmi -f 镜像id 强制删除)

[root@localhost /]# docker rmi feb5d9fea6a5
Untagged: hello-world:latest
Untagged: hello-world@sha256:37a0b92b08d4919615c3ee023f7ddb068d12b8387475d64c622ac30f45c29c51
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359

docker ps -a 列出所有容器 (要删除hello-world镜像,就要先找出引用hello-world的容器id)

[root@localhost /]# docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                     PORTS     NAMES
7657ea7ed321   hello-world   "/hello"   6 minutes ago   Exited (0) 6 minutes ago             epic_goldwasser

docker rm 容器id 删除指定id的容器(之后就可以删除hello-world的镜像了)

[root@localhost /]# docker rm 7657ea7ed321
7657ea7ed321

docker search 镜像名 搜索镜像

[root@localhost /]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11611     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4417      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   857                  [OK]

#可选项,通过收藏来过滤
--filter=STARS=3000		搜索出来的镜像就是收藏是大于3000的

[root@localhost /]# docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   11611     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4417      [OK]

docker pull 镜像名 下载镜像(默认下载最新版)

# 下载镜像 docker pull 镜像名[:tag]
[root@localhost /]# docker pull mysql
Using default tag: latest	# 如果不写[:tag],默认就是latest
latest: Pulling from library/mysql	
b380bbd43752: Pull complete 	# 分层下载, docker image的核心  联合文件系统
f23cbf2ecc5d: Pull complete 
30cfc6c29c0a: Pull complete 
b38609286cbe: Pull complete 
8211d9e66cd6: Pull complete 
2313f9eeca4a: Pull complete 
7eb487d00da0: Pull complete 
4d7421c8152e: Pull complete 
77f3d8811a28: Pull complete 
cce755338cba: Pull complete 
69b753046b9f: Pull complete 
b2e64b0ab53c: Pull complete 
Digest: sha256:6d7d4524463fe6e2b893ffc2b89543c81dec7ef82fb2020a1b27606666464d87		# 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest		# 真实地址

# 以上一条命令等价于
docker pull mysql
docker pull docker.io/library/mysql:latest

# 指定版本下载
[root@localhost /]# docker pull mysql:5.7
5.7: Pulling from library/mysql
b380bbd43752: Already exists 
f23cbf2ecc5d: Already exists 
30cfc6c29c0a: Already exists 
b38609286cbe: Already exists 
8211d9e66cd6: Already exists 
2313f9eeca4a: Already exists 
7eb487d00da0: Already exists 
a71aacf913e7: Pull complete 
393153c555df: Pull complete 
06628e2290d7: Pull complete 
ff2ab8dac9ac: Pull complete 
Digest: sha256:2db8bfd2656b51ded5d938abcded8d32ec6181a9eae8dfc7ddf87a656ef97e97
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

# 查看
[root@localhost /]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        5.7       938b57d64674   13 days ago   448MB
mysql        latest    ecac195d15af   13 days ago   516MB
容器命令

说明:有了镜像才可以创建容器,linux,下载一个centos镜像测试学习

docker pull centos

[root@localhost /]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

新建容器并启动

docker run [可选参数] image

# 参数说明
--name="Name"	容器名字 tomcat01 tomcat02 用来区分容器
-d				后台方式运行
-it				使用交互方式运行,进入容器查看内容
-p				指定容器的端口 -p 8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口(常用)
	-p 容器端口
-p  			随机指定端口

# 测试,启动并进入容器
[root@localhost /]# docker run -it centos /bin/bash
[root@c8a8a13ac174 /]# ls	# 查看容器内的centos,基础版本,很多命令还不完善
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

# 退出容器,从容器退出到主机
[root@c8a8a13ac174 /]# exit		
exit

列出所有运行的容器

docker ps 命令
		# 列出当前正在运行的容器
-a		# 列出当前正在运行的容器 以及 历史运行过的容器
-n=?	# 显示最近创建的容器
-aq		# 显示所有当前容器的编号

[root@localhost /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost /]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                     PORTS     NAMES
c8a8a13ac174   centos    "/bin/bash"   4 minutes ago   Exited (0) 2 minutes ago             optimistic_carver

退出容器

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

删除容器

docker rm 容器id					# 删除指定的容器,不能删除正在运行的容器,要强制删除需要加 -f
docker rm -f $(docker ps -aq)	 # 删除所有的容器
docker ps -a -q|xargs docker rm	 # 删除所有的容器

启动和停止容器的操作

docker start 容器id		# 启动容器
docker restart 容器id		# 重启容器
docker stop	容器id		# 停止当前正在运行的容器
docker kill 容器id		# 强制停止当前容器

常用其他命令

后台启动容器

# 命令 docker run -d 镜像名

# 问题:docker ps, 发现centos停止了

# 常见的坑:docker容器使用后台运行,就必须有一个前台进程,docker发现没有应用,就会自动停止

# nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

查看日志

docker logs -f -t --tail 日志条数 容器id  

# 自己编写一段shell脚本
[root@localhost /]# docker run -d centos /bin/sh -c "while true; do echo localhost;sleep 1;done"
d2a45bc782a75a22e7da22fa06cf0b33274f449025add419811bfc1c816fa11a

[root@localhost /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
d2a45bc782a7   centos    "/bin/sh -c 'while t…"   5 seconds ago   Up 3 seconds             great_edison

# 显示日志
-f -t 可以结合起来 -tf	# 显示日志
--tail number			# 要显示的日志条数
[root@localhost /]# docker logs -f -t --tail 10 d2a45bc782a7
2021-11-01T02:42:16.625371264Z localhost
2021-11-01T02:42:17.628116952Z localhost
2021-11-01T02:42:18.633494886Z localhost
2021-11-01T02:42:19.635309795Z localhost
2021-11-01T02:42:20.638327390Z localhost
2021-11-01T02:42:21.641747570Z localhost
2021-11-01T02:42:22.644098419Z localhost
2021-11-01T02:42:23.655560465Z localhost
2021-11-01T02:42:24.659873927Z localhost
2021-11-01T02:42:25.666505490Z localhost
2021-11-01T02:42:26.669244649Z localhost
2021-11-01T02:42:27.674658522Z localhost
2021-11-01T02:42:28.676837277Z localhost
2021-11-01T02:42:29.678706504Z localhost
2021-11-01T02:42:30.681514524Z localhost
2021-11-01T02:42:31.684640413Z localhost
2021-11-01T02:42:32.688320038Z localhost

查看容器中的进程信息ps

top命令
docker top 容器id
[root@localhost /]# docker top d2a45bc782a7
UID        PID        PPID        C     STIME       TTY        TIME          CMD
root      46808       46787       0     19:40        ?        00:00:00      /bin/sh -c while true; do echo localhost;sleep 1;done
root      47806       46808       0     19:51        ?        00:00:00      /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1

查看镜像的元数据

[root@localhost /]# docker inspect d2a45bc782a7
[
    {
   
        "Id": "d2a45bc782a75a22e7da22fa06cf0b33274f449025add419811bfc1c816fa11a",
        "Created": "2021-11-01T02:40:13.810286187Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true; do echo localhost;sleep 1;done"
        ],
        "State": {
   
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 46808,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-11-01T02:40:15.10685646Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "ResolvConfPath": "/var/lib/docker/containers/d2a45bc782a75a22e7da22fa06cf0b33274f449025add419811bfc1c816fa11a/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/d2a45bc782a75a22e7da22fa06cf0b33274f449025add419811bfc1c816fa11a/hostname",
        "HostsPath": 
### 回答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、付费专栏及课程。

余额充值