Docker
安装Docker
环境准备
-
查看系统版本
[root@VM-12-10-centos ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [root@VM-12-10-centos ~]# 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"
-
查看内核版本
[root@VM-12-10-centos ~]# uname -r 3.10.0-1160.15.2.el7.x86_64
安装
- 卸载旧的版本
- 需要的安装包
- 设置镜像的仓库
- 安装docker
- 启动docker
systemctl start docker
- 启动
hello-world
镜像docker run hello-world
- 查看是否存在
hello-world
镜像docker images
- 镜像加速
底层原理
Docker 是怎么工作的
Docker是Client-Server结构的的系统
Docker 的常用命令
docker version # 版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令
一、 镜像命令
- docker images
docker images
[root@VM-12-10-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 2 weeks ago 13.3kB
# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像的创建时间
SIZE 镜像的大小
Options:
-a, --all Show all images (default
hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on
conditions provided
--format string Pretty-print images using a
Go template
--no-trunc Don't truncate output
-q, --quiet Only show image IDs
- docker search
[root@VM-12-10-centos ~]# docker search mysql
-
docker pull 下载镜像
如果不写版本默认为
latest
,下载方式为分层下载(docker image的核心 联合文件系统)指定版本下载:
docker pull mysql:5.7
-
docker rmi 删除镜像
docker rmi -f $(docker images -aq)
删除所有的镜像
二、容器命令
有了镜像才可以创建容器,下载一个
centos
来测试学习
-
新建容器并启动
docker pull centos
docker run [可选参数] image # 参数说明 --name="Name" 容器的名字,用来区分容器 -d 后台方式运行 -it 使用交互方式运行,进入容器查看内容 -p 指定容端口 -p 8080:8080 -p 主机端口:容器端口 (常用) -p 容器端口 容器端口 -P 随机指定端口 #测试 # 启动并进入容器 [root@VM-12-10-centos ~]# docker run -it centos /bin/bash [root@b3d28c7229f1 /]#
-
查看运行的容器
docker ps
查看运行中的容器docker ps -a
查看包括运行过的容器docker ps -a -n=?
列出包括运行过的n个容器docker ps -q
只显示容器的编号 -
退出容器
exit # 容器停止退出 Ctrl + P + Q # 容器不停止退出
-
删除容器
docker rm 容器id docker rm -f $(docker ps -aq) 删除所有的容器
-
启动和停止容器的操作
start restart stop kill
三、常用其他命令
start 是启动docker里面创建过的容器,run 是新建容器并运行
-
后台启动容器
# 命令 docker run -d 镜像名 # 问题:docker ps 发现 容器停止了 # 常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用就会自动停止。
-
docker logs
查看日志信息 -
docker top
查看容器中的信息 -
进入当前正在运行的容器
# 我们通常容器都是使用后台的方式运行的,需要进入容器,修改一些配置 # 命令 docker exec -it 容器id bashshell
-
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机路径
实例
一、安装 nginx
# 1. 搜索镜像
docker search nginx
# 2. 下载镜像
docker pull nginx
# 3. 查看是否已下载
docker images
二、安装 tomcat
# 官方的使用
$ docker run -it --rm tomcat:9.0
# 我们之前的启动都是后台,停止容器之后,容器还是可以查到 docker run -it --rm, 一般用来测试,用完就删除
思考:我们以后部署项目,如果每次都要进入容器就会非常麻烦,是否可以在容器外部提供一个映射路径,在外部放置项目,就自动同步到内部。
三、部署 es + kibana
# 部署的端口很多
# es 十分的耗内存
# es 的数据一般需要放到安全目录 挂载
# --net somenetwork 网络配置
# 启动
$ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
# 通过修改内存限制来处理内存占用过大的问题
可视化
-
portainer (先用这个)
docker run -d -p 8080:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
-
Rancher(CI/CD再用)
什么是portainer
Docker图形化界面管理工具,提供一个后台面板供我们操作,运行,并访问公网
选择本地:
进入之后的面板:
可视化面板平时不会使用。
Docker镜像
特点
Docker镜像是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,这一层就是我们通常说的容器层,容器之下的都叫镜像层(镜像层无法改变)。
提交一个自己的镜像(commit)
docker commit 提交容器成为一个新的副本
# 命令和git类型
docker commit -m="提交容器的描述信息" -a="作者" 容器id 目标镜像名 [TAG]
实战测试:
# 启动默认的Tomcat
# 发现webapps下没有文件