拉取了一个个虚拟机模板,启动实例, 根据虚拟机模板,创建多个虚拟机 虚拟机套虚拟机
容器就是简易版的linux环境 (包括root用户权限,进程空间,用户空间,网络空间)和运行在其中的应用程序
Docker 要求 CentOS 系统的内核版本高于 3.10,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
停止docker
systemctl stop docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
yum -y install gcc
yum -y install gcc-c++
安装依赖:
yum install -y yum-utils
阿里云的镜像地址
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
验证设置是否成功
cd /etc/yum.repos.d
ls
1.4.1更新索引
yum makecache fase
1.4.2 安装docker
yum install docker-ce docker-ce-cli containerd.io
1.4.3 启动并加入开机启动
systemctl start docker
设置开机启动
systemctl enable docker
1.6.验证是否安装成功
docker version
加速下载镜像可以配置阿里的加速器
地址:https://cr.console.aliyun.com的控制台
mkdir -p /etc/docker/
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://aaaaaa.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
启动
systemctl start docker
停止
systemctl stop docker
重启
systemctl restart docker
状态
systemctl status docker
概要信息
docker info
机器存放docker镜像得地址,也可以看到docker仓库的地址
帮助文档
docker --help
搜索镜像(mysql为例)
docker search mysql
拉取镜像 (不加版本直接拉取最新版本)
#直接下拉最新版本
docker pull mysql
#拉取8.0版本
docker pull mysql:8.0
查看本地镜像
docker images #查看已下载镜像。
导入镜像
docker load -i /root/docker-centos-httpd.tar
删除镜像
#删除镜像
docker rmi [IMAGE ID]
#强制删除镜像
docker rmi -f [IMAGE ID]
#删除全部镜像
docker rmi -f $(docker images -aq)
运行容器
option | 作用 |
--name="容器的新名称" | 为容器指定一个新名称 |
-d | 后台运行 |
-i | 交互模式运行容器,通常与-t同时使用 (非后台启动) |
-t | 为容器从新分配一个伪终端,通常与 -i同时使用 |
-p(小写p) | 指定端口映射,格式:主机(宿主)端口:容器端口 |
-P(大写P) | 随机端口映射 |
-u | 以什么用户身份创建容器 |
-m, --memory bytes | 设置容器使用内存最大值 |
-h, --hostname string | 指定容器的 host name |
–dns 8.8.8.8 | 指定容器 dns 服务器 |
-e username=“ritchie” | 设置环境变量 |
–restart Docker | 重启后,容器是否自动重启 |
–privileged | 容器内是否使用真正的 root 权限 |
直接启动容器实例:
#启动mysql实例 但是名称是随机的,端口也是 不推荐
docker run mysql
#启动mysql实例并且开启一个内部的 shell窗口(可用linux命令操作mysql实例内部)
docker run -it mysql /bin/bash
退出shell窗口
exit:容器也会停止
ctrl+p+q :容器不会停止
# 运行 名字是 my_tomcat8的 tomcat(版本8) 非后台启动方式
docker run --name my_tomcat8 tomcat:8
ctrl +c 退出
# 后台运行
docker run -d --name my_tomcat8 tomcat:8
#后台启动 主机9999端口映射8080
docker run -d -p 9999:8080 --name my_tomcat8 tomcat:8
#主机的目录 /usr/local/tomcat/webapps 映射到容器的 /usr/local/tomcat/webapps
以后直接在主机的 webapps 目录上传 war 包,就能在浏览器访问对应的项目
docker run -d -p 9999:8080 -i --name tomcat7 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat:7
查询已经启动的容器
docker ps
查询全部容器(已经停止的/正在启动)
docker ps -a
重启容器:
docker restart 容器id或者容器名
停止容器:
docker stop 容器id或者容器名
强制停止容器:
docker kill 容器id或者容器名
删除已经停止的容器:
docker rm 容器id或者容器名
事例如何停止容器实例
镜像命令大全
不指定名称或者端口映射 都是随机给你
docker images #查看所有本地主机的镜像
docker search 镜像名 #搜索镜像
docker pull 镜像名 [标签] #下载镜像(如果不写tag,默认是latest)
docker rmi 镜像名 [标签] #删除镜像
docker rmi image Id #删除镜像 (运行中的删除不了)
docker rmi -f $(docker images -aq) 删除全部镜像
docker rmi -f image Id 强制删除镜像
docker tag 镜像名:版本 新镜像名:版本 #复制镜像并且修改名称
docker commit -a "xxx" -c "xxx" 镜像ID 名字:版本 #提交镜像
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
docker load -i /xxx/xxx.tar #导入镜像
docker save -o /xxx/xxx.tar #保存一个镜像为一个tar包
docker run [可选参数] image 命令 #启动容器(无镜像会先下载镜像)
#参数说明
--name = "Name" 容器名字
-c 后面跟待完成的命令
-d 以后台方式运行并且返回ID,启动守护进程式容器
-i 使用交互方式运行容器,通常与t同时使用
-t 为容器重新分配一个伪输入终端。也即启动交互式容器
-p 指定容器端口 -p 容器端口:物理机端口 映射端口
-P 随机指定端口
-v 给容器挂载存储卷
docker build #创建镜像 -f:指定dockerfile文件路径 -t:镜像名字以及标签
docker logs 容器实例的ID #查看容器日志
docker rename 旧名字 新名字 # 给容器重新命名
docker top 容器实例的ID #查看容器内进程
docker ps -a #列出所有容器(不加-a就是在运行的)
docker rm 容器实例的ID #删除容器(正在运行容器不能删除,除非加-f选项)
docker kill 容器实例的ID #杀掉容器
docker history 容器实例的ID #查看docker镜像的变更历史
docker start 容器实例的ID #启动容器
docker restart 容器实例的ID #重启容器
docker stop 容器实例的ID #停止正在运行的容器
docker attach /docker exec 容器实例的ID #同为进入容器命令,不同的是attach连接终止会让容器退出后台运行,而exec不会。并且,docker attach是进入正在执行的终端,不会情动新的进程,而docker exec则会开启一个新的终端,可以在里面操作。
docker image inspect 容器名称:容器标签 #查看容器内源数据
docker cp 容器id:容器内路径 目的主机路径 #从容器内拷贝文件到主机(常用)或者从主机拷贝到容器(一般用挂载)
exit #直接退出容器
crlt + P + Q #退出容器但是不终止运行
运行一个redis实例
docker run -d -p 6379:6379 --name my_redis redis:6.0.8
查询全部容器实例(找到容器实例ID)
docker ps -a
查询容器产生的日志
docker logs 容器id或者容器名
查看容器内运行进程
docker top 容器id或者容器名
查看容器内部信息(json形式展示)
docker inspect 容器id
进入容器并以命令交互
进入容器里(推荐):
docker exec -it 容器id /bin/bash
进入容器里:(不要用)
docker attach 容器id /bin/bash
区别:attach直接进入,不会启动新的进程,用exit退出,会导致容器的停止
exec ,启动新的进程,用exit退出,不会导致容器的停止
从容器内拷贝文件到主机上
docker cp 容器id: 容器内路径 目的主机路径
docker cp 容器id: /user/local/a.txt /user/local
导入导出镜像
场景 基础镜像
docker export 容器id>文件名.tar
cat 文件名.tar | docker import - 镜像新名称:镜像版本号
将实例打包到当前目录下并叫 my_redis.tar
docker export e0bb0dcbc45b>my_redis.tar
导入
cat my_redis.tar | docker import - myredis/redis:6.0.8
导入的时候不能改别的名称
docker load -i /xxx/xxx.tar #导入镜像
docker save -o /xxx/xxx.tar #保存一个镜像为一个tar包
提交镜像:
docker commit -a "xxx" -c "xxx" 镜像ID 名字:版本 #提交镜像
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
docker commit -a "xiaoming" -m "测试redis docker images" e0bb0dcbc45b redisname:6.0.8