0
点赞
收藏
分享

微信扫一扫

docker 学习笔记

窗外路过了谁 2022-03-14 阅读 91

xx环境查看

# 系统内核是3.10以上得
[root@localhost ~]# uname -r
3.10.0-1160.el7.x86_64
# 系统版本
[root@localhost ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

安装docker

1.卸载旧版本

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

2.需要得安装包

yum install -y yum-utils

3.设置镜像得仓库

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

建议更新yun软件包索引

yum makecache fast

4.安装docker

注: docker-ce社区 ee企业版

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

5.启动Docker

systemctl start docker

7.检查是否安装成功

docker version

image-20220201210931053

8.配置阿里加速源

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

hello-world

docker run hello-world
查看一下下载的这个 hello-world 镜像


[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   4 months ago   13.3kB

了解:卸载docker

#	1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io

# 	2.删除资源
rm -rf /var/lib/docker

# 	/var/lib/docker		docker的默认工作路径

阿里云镜像加速

image-20220201220304185

配置使用

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

Docker的常用命令

帮助命令

docker version		#显示docker的版本信息
docker	info		#显示docker的系统
docker 命令 --help	#万能命令

帮助文档的地址:https://docs.docker.com/engine/reference/commandline/docker/

镜像命令

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

[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   4 months ago   13.3kB

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

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

docker search 搜索镜像

[root@localhost ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   12044     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4615      [OK]   

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

docker pull 下载镜像

#下载镜像 docker pull 镜像名[:tag]
[root@localhost ~]# docker pull mysql
Using default tag: latest	#如果不写tag,默认就是latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete 	#分层下载, docker iamge的核心 联合文件系统
93619dbc5b36: Pull complete 
99da31dd6142: Pull complete 
626033c43d70: Pull complete 
37d5d7efb64e: Pull complete 
ac563158d721: Pull complete 
d2ba16033dad: Pull complete 
688ba7d5c01a: Pull complete 
00e060b6d11d: Pull complete 
1c04857f594f: Pull complete 
4d7cfa90e6ea: Pull complete 
e0431212d27d: Pull complete 
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709	#签名  防伪标志
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
72a69066d2fe: Already exists 
93619dbc5b36: Already exists 
99da31dd6142: Already exists 
626033c43d70: Already exists 
37d5d7efb64e: Already exists 
ac563158d721: Already exists 
d2ba16033dad: Already exists 
0ceb82207cd7: Pull complete 
37f2405cae96: Pull complete 
e2482e017e53: Pull complete 
70deed891d42: Pull complete 
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

docker rmi 删除镜像

[root@localhost ~]#  docker rmi-f 容器id	#删除指定的容器
[root@localhost ~]#  docker rmi-f 容器id 容器id 容器id 容器id	#删除多个容器
[root@localhost ~]#  docker rmi -f $(docker images -aq)		#删除全部的容器

容器命令

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

docker pull centos

新建容器并启动

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@4e2b6e3449a8 /]# ls   #查看容器内的cnetos,基础版本,很多命令都是不完善的!
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr



列出所有得运行容器

#docker ps 命令
   #列出当前正在运行的容器
-a #列出当前正在运行的容器+带出历史运行过的容器
-n=? #显示最近创建的容器
-q #只显示容器的编号



[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
4e2b6e3449a8   centos         "/bin/bash"              5 minutes ago   Exited (0) 3 minutes ago               zealous_lewin
e2bf2419cac6   centos         "/bin/bash"              6 minutes ago   Exited (127) 5 minutes ago             festive_shannon
[root@localhost ~]# 

退出容器

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

删除容器

docker rm 容器id     #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -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 镜像名!
[root@localhost ~]# docker run -d centos

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

#常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动后。发现自己没有提供服务,就会立刻停止,没有程序了

查看日志

docker logs -f -t --tail 容器,没有日志

#显示日志
-tf   #显示日志
--tail	number #要显示日志条数

查看容器中进程信息

#命令 dockers top 容器id
[root@localhost ~]# docker top 13f84edf9c80
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                4729                4710                0                   23:43               pts/0               00:00:00            /bin/bash

查看镜像的源数据

#命令 docker inspect 容器id

#测试
[root@localhost ~]# docker inspect 13f84edf9c80

进入当前正在运行的容器

#我们通常容器都是使用后台方式运行的,需要进行容器,修改一些配置
#命令
docker exec -it 容器id /bin/bash

#方式2
docker attach 容器id
#测试
[root@localhost ~]# docker attach 13f84edf9c80
执行当前的代码

#docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach #进入容器正在执行的终端,不会启动新的进程!

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

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

作业1安装nginx

docker run -d -p 3344:80 nginx 启动nginx

curl localhost:3344 检测

#1.搜索镜像 search 建议大家去docker搜索,可以看到帮助文档
#2.下载镜像 pull
#3.运行测试
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    605c77e624dd   5 weeks ago    141MB
centos       latest    5d0da3dc9764   4 months ago   231MB


# -d 后台运行
# --name 给容器命名
#-p		宿主机端口,

作业2安装tomcat

#官方的使用
docker run -it --rm tomcat:9.0

#我们之前的启动都是后台,停止了容器之后,容器还是可以查到, docker run -it --rm 一般用来测试,用完删除

#下载在启动
docker pull tomcat

#启动运行
docker run -d -p 3333:8080 --name tomcat01 tomcat

#测试访问没有问题

#进入容器
[root@localhost ~]# docker exec -it tomcat01 /bin/bash
root@f7e670e1cf5d:/usr/local/tomcat# 

#发现问题	1.linux命令少了,2、没有webpps 3、阿里云镜像的原因,默认是最小的镜像,所有不必要的剔除掉
#保证最小运行的环境!

#把root权限给到webapps
root@f7e670e1cf5d:/usr/local/tomcat# cp -r webapps.dist/* webapps

作业3 部署es+kibana

#	es 	暴露的端口很多
#	es	十分的耗内存
#	es的数据一般需要放置到安全目录!挂载
# 	--net somenetwork ? 网络配置

#	启动 elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.0
#启动了	linux就变卡了	docker stats 查看cpu状态

es 是十分耗内存的

#查看docker stats

#赶紧关闭	增加内存的限制	修改配置文件 -e 环境配置修改
[root@localhost ~]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
#-e ES_JAVA_OPTS="-Xms64m -Xmx512m"限制内存大小

可视化

portainer(先用这个)

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

Rancher(CI/CD再用)

什么portainer?

Docker图形化界面管理工具!提供一个后台面板供我们操作!

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

docker镜像讲解

镜像是什么

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

如何得到镜像:

·从远程仓库下载
·朋友拷贝给你
·自己制作一个镜像 Dockerfile

Docker镜像加载原理

我们下载的时候看到的一层层就是这个!
UnionFS(联合文件系统): Union文件系统( UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下 unite several directories into a single virtualfilesystem). Union文件系统是 Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

特点

Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层!

image-20220217152116208

如何提交一个自己的镜像

commit镜像

docker commit 提交容器成为一个新的副本

#命令和git原理类似
docker commit -m="提交的描述信息" -a"作者" 容器id 目标镜像名:[TAG]

实战测试

# 启动一个默认的tomcat

#发现这个默认的tomcat 是没有webapps应用,镜像的原因,官方的镜像默认webapps下面是没有文件的!

#我自己拷贝进去了基本的文件

#将我们操作过的容器通过commit提交为一个镜像!我们以后就使用我们修改过的镜像即可,这就是我们自己的一个修改的镜像
image-20220217154135455

学习方式说明:理解概念,但是一定要实践,最后时间和理论相结合一次搞定这个知识

如果你想要保存当前容器的状态,就可以commit来提交,获得一个镜像,就好比我们以前学习vm时候,快照!

到这里才算入门Docker!

容器数据卷

什么是容器数据卷

docker的理念回顾

将应用和环境打包成一个镜像
数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化
MySQL,容器删了,删库跑路!需求:MysQL数据可以存储在本地
容器之间可以有一个数据共享的技术!docker容器中产生的数据,同步到本地!

这就是卷技术!目录的挂载,将我们容器内的目录,挂载到linux上面!

image-20220217174756672

总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!

使用数据卷

方法一:直接使用命令来挂载 -v

docker run -it -v 主机目录:容器目录  (会占用两倍的存储)

# 测试
[root@localhost ~]# docker run -it -v /home/ceshi:/home centos /bin/bash

#启动起来时候我们可以通过 docker inspect 容器id

image-20220217180253611

测试文件的同步

image-20220217193343527

再来测试!

1、停止容器

2、宿主机修改文件

3、启动容器

4、容器内的数据依旧是同步的

image-20220217193510377

好处:我们以后修改只需要在本地修改即可,容器内会自动同步

实战:安装MySQL

思考:Mysql的数据持久化的问题!

# 获取镜像
[root@localhost ~]# docker pull mysql:5.7

# 运行容器,需要做数据
[root@localhost ~]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql
t

DockerFile

Docker 网络

举报

相关推荐

0 条评论