1.
Java jdk
环境不一致
虚拟机
linux 容器
docker
容器的封装
将所需的环境打包给你
秒级启动
不用考虑cpu 是否支持虚拟化
单项目打包
整套项目打包
新开源技术
环境一致性
持续集成 jenkins ci cd
微服务 接口拆封 分别调用
弹性伸缩 服务器的量 按量付费
docker就是用来生成镜像的
https://docs.docker.com/install/linux/docker-ce/centos/
docker官网
yum list | grep docker
启动:systemctl start docker
镜像容器
镜像加速器
容器镜像加速器
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://oi55stdg.mirror.aliyuncs.com"] } EOF
镜像更新
systemctl daemon-reload
systemctl restart docker
镜像是容器的模板
docker image ls
列出所有镜像
docker search ubuntu
// 查看镜像版本
官方发布的 和非官方提供的
docker image history ubuntu
docker image pull centos
docker image pull centos:6 指定6版本
docker image push
docker image rmi ubuntu
docker image prune 移除
docker image tag centos guozimo123/centos7:latest
docker image export
docker image import
docker image save
docker image load
docker image build
docker账号:guozimo123
docker login
docker push guozimo123/centos7:latest
必须和你的账号对应才能提交成功
docker container run hello-world
从一个镜像运行一个容器
docker container ls -a
docker image inspect 查看容器内容
docker container run -it centos /bin/bash
// 进入容器中
docker container ps -a
查看所有容器
// nginx 映射80端口 宿主机8080映射容器的80端口 nginx暴露80端口
docker run -p 8080:80 nginx
// 后台运行
docker run -d -p 8080:80 nginx
curl http://39.105.91.188:8080
docker logs 容器id 查看容器日志
一个容器起一个服务
docker container stop xxx
docker container rm xxx
docker container ps -a 查看所有的容器
删除所有容器
docker container rm $(docker ps -a -q)
打印id
镜像增加层:
docker commit -a "guozimo" -m"add myroot.text" + 容器id myroot:latest
docker commit -a "guozimo" -m"add myroot.text" 82aa65e32253 myroot:latest
docker image ls
可以查看到myroot
docker image inspect myroot
结果如下
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3"
]
},
docker container logs 34e3d0f600b5
docker container kill xxx 停止容器
从指定容器中导出一个文件到locahost
docker export -o centos.star xxx 容器id
导回去
docker import centos.star
// 没有指定容器 prune 会把镜像删除 删除没有tag的
docker run -it -e name='guozimo' centos /bin/bash
// 指定环境变量
echo $name 可以看到环境变量
exec 进入一个正在运行的docker
制作个性化镜像
docker run -it ubuntu /bin/bash
cd /root
touch love.txt
// 把容器变为镜像 组合新镜像
docker container commit -m"我的个性化ubuntu" -a"guozimo" xxx guozimo/myubuntu:v1
docker image ls
docker run -it xxxx /bin/bash
Dockerfile 制作个性化容器 将express项目定制化成一个镜像暴露出3000端口让外面访问
mkdir nodeapp
cd nodeapp
ls
vi .dockerignore
npm install express-generator -g
// express 项目生成器
express app
ls
vi Dockerfile
Dockerfile重的内容如下
FROM node FROM 继承的镜像 这个镜像的上层镜像来源
COPY ./app /app 把我本地文件app文件拷贝到镜像的app文件中
WORKDIR /app 指定当前的目录为app
RUN npm install 镜像中执行shell脚本
EXPOSE 3000 向外暴露3000端口
CMD npm start
ls
docker build -t express-demo .
docker image ls 可以查看到express-demo这个镜像
docker run -it de01d81c6539 /bin/bash
ls
npm start
exit
// 3000为监听的项目的端口号
docker run -it -p 8090:3000 de01d81c6539 /bin/bash
npm start // 希望命令自动输入 希望后台运行
修改Dockerfile文件
exit
vi Dockerfile
增加CMD npm start // 启动容器时执行
docker build -t express-demo .
docker image ls 查看最新的id
docker run -d -p 8090:3000 9cdcf367050e
或者docker run -d -p 8090:3000 9cdcf367050e npm start
另一个窗口登录服务器 curl http://localhost:8090
数据盘
容器删除掉 日志不能丢掉 保留 放到宿主机上
volumn
停掉所有的容器
docker container stop $(docker container ps -a -q)
docker container kill $(docker container ps -a -q)
docker container rm $(docker container ps -a -q)
docker container ls
创建数据卷
docker volume create nginx-logger
在宿主机上
docker volume ls
docker volume inspect nginx-logger
从根目录cd 进入cd /var/lib/docker/volumes/nginx-logger/_data
docker volume create nginx-html
docker run -d --name nginx1 --mount src=nginx-html,dst=/usr/share/nginx/html nginx
新开窗口根目录 宿主目录小 cd /var/lib/docker/volumes/nginx-html/_data
ll
查看nginx记录
宿主机和容器内容同步
进入容器
docker container exec -it 3e2e0dd9d312 /bin/bash
cd /usr/share/nginx/html
ls
第二种方法
docker run -d --name nginx2 -v nginx-html:/usr/share/nginx/html nginx
// a82befe8966c9062253ec637e1ca1229375648b6149219b543135bdd9a05f954 输出内容的前12位是id
删除数据卷
// 停掉容器 rm掉然后删除数据卷
docker volume rm nginx-html
docker volume ls -f dangling=true
docker volume prune
docker volume ls
bind-mount 挂在宿主机任何位置 任意目录 都可以
docker run -v /mnt:/mnt -it --name logs centos bash
cd /mnt
touch mnt.txt
exit
/mnt 切到宿主机
cd /mnt
ls
多个nginx 写到一个数据盘中
继承数据盘
docker search node 查找node镜像