1.yum install -y gcc gcc-c++
2.yum install -y yum-utils
3.设置stable镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.更新yum软件包索引
yum makecache fast
5.安装docker ce
yum install -y docker-ce docker-ce-cli containerd.io
6.启动docker
systemctl start docker
7.测试
docker --version
docker run hello-world
8.卸载docker
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
9.镜像加速器配置
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{ "registry-mirrors": ["https://vgd4an7m.mirror.aliyuncs.com"] }
EOF
systemctl daemon-reload
systemctl restart docker
10.常用命令
帮助启动类命令:systemctl start/stop/restart/status/enable docker
查看docker概要信息:docker info
查看docker总体帮助文档:docker --helo
查看docker命令帮助文档:docker 具体命令 --help
docker images 列出本地主机上的镜像 参数: -a :列出本地所有的镜像(含历史映像层) -q:只显示镜像ID
docker search 某个镜像名字 参数:--limit:只列出N个镜像,默认25个 例子:docker search --limit 5 redis
下载镜像:docker pull 某个镜像名字 [:TAG](指定版本,例如MySQL5.6) 没有TAG就是最新版 等价于docker pull 镜像名字:latest
docker system df 查看镜像/容器/数据卷所占的空间
docker rmi 镜像名字或id(-f强制删除)
删除多个 docker rmi -f 镜像名1:(TAG) 镜像名2:(TAG)
删除全部docker rmi -f $(docker images -qa)
仓库名、标签都是<none>的镜像,俗称虚悬镜像 dagling image
docker run [options] inage
option: --name 指定容器新名字 -d 后台运行容器并返回容器id,也即启动守护式容器(后台运行) -i: 以交互模式运行容器,通常与-t同时使用 -t:为容器重新分配一个伪输入终端,通常和-i同时使用(也即启动交互式容器(前台有伪终端,等待交互)) -P:随机端口映射 -p: 指定端口映射
docker run -it ubuntu /bin/bash(交互式shell)
列出当前所有正在运行的容器:docker ps [options] 列出正在运行的容器 -a: 列出当前正在运行的容器+历史上运行过的 -l:显示最近创建的容器 -n:显示最近n个创建的容器 例如:decker ps -n 1 -q:静默模式,只显示容器编号
退出容器 :exit : run进去容器,exit退出,容器停止 。ctrl+p+q 容器不停止
启动已停止运行的容器:docker start 容器id或者容器名
docker restart/stop 容器id/容器名
强制亭子容器:docker kill 容器id/容器名
删除已停止的容器 docker rm 容器id/容器名(-f 强制删除正在运行的容器)
删除多个容器实例 docker rm -f $(docker ps -qa) / docker ps -qa | xargs docker rm
11.
后台启动容器
docker run -d 镜像名 d
docker run -d centos 问题:docker ps ,发现centos停止了 ,
常见的坑,docker 容器使用后台运行 ,就必须要有一个前台进程,docker发现没有应用,就会自动停止
# nginx ,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
12 查看日志
docker logs -f -t --tail 容器,没有日志
#自己编写一个shell脚本
docker run -d centos /bin/bash -c "while true;do eccho hello;sleep 1;done"
docker ps
docker logs -tf 显示日志 --tail number 显示日志的条数
docker logs -tf --tail 10 容器id
13.查看容器中进程信息
docker top 容器id
14 查看容器的元数据
docker inspect 容器id
15 进入当前正在运行的容器
# 我们通常容器是使用后台方式运行的,需要进入容器,修改一些配置
方式一:
docker exec -it 容器id bashsheel
docker exec -it 容器id /bin/bash
方式二:
docker attach 容器id
总结:
docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach # 进入容器正在执行的终端,不会启动新的终端
16 从容器内拷贝文件到主机上
#进入容器内部 docker attach 容器id
在容器内新建文件 touch test.java
返回主机 exit
docker cp 容器id:/home/test.java /home
# 拷贝是一个手动过程,未来我们使用-v卷的技术,可以实现
17 docker 安装 nginx
docker search nginx
docker pull nginx
-d 后台运行 --name 给容器命名 -p 宿主机端口,容器内部端口
docker run -d --name nginx -p 3344:80 nginx
测试
curl localhost:3344
18 安装tomcat
官方:docker run -it --rm tomcae:9.0 #--rm 用完即删 容器停止后查看不到
docker pull tomcat
docker run -d -p 3355:8080 --name tomcat01 tomcat
#进入容器 docker exec -it tomcat01 /bin/bash
#发现问题 1、linux命令少了 2、没有webapps,阿里云镜像的原因,默认是最小的镜像,所以不必要的都剔除掉。 保证最小可运行的环境
cpd /usr/local/tomcat
cp -r ./webapps.dist/* ./webapps
19.部署 es+kibana
#es 暴漏的端口很多 、十分耗内存、数据一般要放在安全目录!挂载
# --net somenetwork 网络配置
#启动elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-nide"
# 测试 curl localhost:9200
es 是十分消耗内存的
#查看docker stats
# 赶紧关闭,增加内存的限制,修改配置文件 -e 环境配置修改
docker run -d --name elasticsearch2 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-nide" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
20 可视化面板
一:portainer :
docker run -d -p 8088:9000 \
--restart=always -v /ver/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
二:Rancher(CI/CD再用)
21
22 commit 镜像
docker commit 提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a=“作者” 容器id 目标镜像名:[TAG](自定义)
23 使用数据卷
方式一 : 直接使用命令来挂载 -v
docker run -it -v 主机目录,容器内目录
#测试
docker run -it /home/ceshi(主机):/home(容器内) centos /bin/bash
# 启动起来时候我们可以通过 docker inspect 容器id 查看是否挂载成功
#测试’
停止容器>宿主机上修改文件>启动容器>容器内的数据依旧是同步的
24 实战 MySQL同步数据
docker pull mysql:5.7
-d 后台运行 -p 端口映射 -v 卷挂载 -e 环境配置 --name 指定容器名字
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v \ /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 \
--name mysql01 mysql:5.7
25 匿名挂载和具名挂载
所有的docker容器内的卷,没有指定目录的情况下都是在 \
/var/lib/docker/volumes/xxxx/_data
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
ro readonly #只读
rw readwrite #可读可写
26 初识Dockerfile
Dockerfile 就是用来构建docker 镜像的构建文件,命令脚本
#创建一个文件 ,名字随机 建议Dockerfilexx
指令要大写
写入:
FROM centos
VOLUME ["volume01","volume02"] (匿名挂载)
CMD echo "-----end-----"
CMD /bin/bash
docker inspect 容器id
27. 多个mysq容器实现数据共享
docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD
=123456 --name mysql101 mysql:5.7
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD =123456 --name mysql102
volumes-form mysql101 mysql:5.7
结论:容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器为止
但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的
28 DockerFile 介绍
29 DockerFile 指令
30 构建自己的centos
31 DockerFile 制作tomcat镜像
32