标签:原生 容器 学习 nginx yum 镜像 docker id
Docker基本概念
解决的问题
统一标准
应用构建
java、c++、javaScript 打包成镜像 exe docker build.....镜像
应用分享
所有软件的镜像放到一个指定的地方 docker hub 安卓、应用市场
应用运行
统一的标准的镜像
docker run
容器化技术
1.基础镜像MB级别
2.创建简单
3.隔离性强
4.启动速度秒级
5.移植与分享方便
资源隔离
cpu、memory资源隔离与限制 访问设备隔离与限制 网络隔离与限制 用户、用户组隔离限制
架构
Docker Host: 安装Docker的主机 Docker Daemon 运行在Docker主机上的Docker后台进程 Client 操作Docker主机的客户端(命令行、UI等) Registry 镜像仓库 Docker Hub Images 镜像、带环境打包好的程序、可以直接启动运行 Containers 容器、由镜像启动起来正在运行中的程序
Docker的安装
确定你是Centos7及以上版本
cat /etc/redhat-release
卸载旧版本
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
yum安装gcc相关
yum -y install gcc yum -y install gcc-c++
安装需要的软件包
yum install -y yum -utils
使用阿里云服务器要再加上一步才可以设置镜像
yum install -y yum-utils device-mapper-persistent-data lvm2
设置stable镜像仓库
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
设置阿里云镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包索引
yum makecache fast
安装DOCKER CE
sudo yum install docker-ce docker-ce-cli containerd.io
启动如果没有报错说明没有问题
systemctl start docker
查看后台服务
ps -ef |grep docker
测试
docker version
docker run hello-world
卸载
systemctl stop docker yum remove docker-ce docker-ce-cli containerd.io rm -rf /var/lib/docker rm -rf /var/lib/containerd
镜像加速器配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://l3su1l19.mirror.aliyuncs.com"] } EOF
sudo systemctl daemon-reload sudo systemctl restart docker
为什么Docker会比vm虚拟机快
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
2.容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
3.每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。
1.docker 有着比虚拟机更少的抽象层
由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接试用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显的优势。。
2.docker利用的是宿主机的内核,而不需要加载操作系统的OS内核
当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建的过程时分钟级别的,而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。
帮助启动类命令
启动docker: systemctl start docker 停止docker: systemctl stop docker 重启docker: systemctl restart docker 查看docker状态: systemctl status docker 开机启动: systemctl enable docker 查看docker概要信息: docker info 查看docker总体帮助文档: docker --help 查看docker命令帮助文档: docker 具体命令 --help
原本的docker源:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
换成了阿里的:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
但是问题也就出现在这里了,
但我使用sudo systemctl enable docker命令的时候
给我报了这个
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
最后知道了,因为我在使用源的时候,执行了这个
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
但是如果我们换成了阿里的之后,这个并没有先操作!
因此如果我们换了了阿里云之后,还是必须执行这个命令
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
然后就能解决这个报出来了问题了.
安装Nginx
#拉取最新镜像 docker pull nginx #镜像名:版本号 docker pull nginx:1.20.1 #拉取最新镜像 docker pull redis #镜像名:版本号 docker pull redis:6.2.4 ##下载来的镜像都在本地 docker images #查看所有镜像 redis =redis:lateest #卸载 docker rmi 镜像名:版本号/镜像id
容器操作
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] docker run 设置项 镜像名 镜像启动运行的命令(镜像里面默认有的,一般不会写) #文档帮助 docker run --help #启动nginx -d后台运行 --restart=always:开机自启
-p设置端口 docker run --name=nginx -d --restart=always -p 88:80 nginx #查看正在运行的容器 docker ps #查看所有 docker ps -a #删除停止的容器 docker rm 容器的名字/id
#强制删除命令
docker rm -f mynginx #停止容器 docker stop 容器id/名字 #再次启动 docker start 容器id/名字 #访问 curl 127.0.0.1:80 #更新容器的设置项 docker update 容器id/名字 --restart=always #重启 reboot
进入容器修改内容
#查看 docker ps #进入docker容器中 docker exec -it 容器id /bin/bash
#进入nginx中
cd /usr/share/nginx/
#查看
ls
#进入html
cd html
#查看
ls
#替换
echo "<h1>Welcome to yongyuankuaile</h1>" > index.html
#查看
cat index.html
#退出
exit
#退出
exit
提交改变
#查看运行的 docker ps #提交 docker commit --help docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] #提交(容器id是运行的容器id) docker commit -a "leifengyang" -m "首页变化" 容器id guignginx:v1.0 #查看 docker images #测试删除(容器id是运行的容器id) docker rm -f 容器id #启动 docker run -d -p 88:80 --name mybnginx nginx #查看是否运行 docker ps #测试删除(容器id是运行的容器id) docker rm -f 容器id #启动 docker run -d -p 88:80 guignginx:v1.0 #查看是否运行 docker ps
容器传输
#查看 docker images #帮助 docker save --help #将镜像保存成为压缩包 docker save -o abc.tar 容器名:v1.0 #查看 ls #复制别的主机 scp abc.tar root@远程主机ip:/root/ 输入密码就开始传输
#别的机器加载这个镜像
docker load -i abc.tar
另一个被传输的主机
#需要安装gitlab和prometheus #查看 ls #帮助 docker load --helo #使用传输的镜像 docker load -i abc.tar
#检查
docker images
#启动
docker ps
#启动
docker run --name=mynginx -d -p 80:80 guignginx:v1.0
#查看
docker ps
镜像推送
登录https://hub.docker.com/里面
创建仓库
docker tag local-image:tagname new-repo:tagname docker push new-repo:tagname #把旧镜像的名字、改成仓库要求的新版名字 docker tag guignginx:v1.0 zhangyongyuan/guignginx:v1.0 #检查 docker images #登录到github docker login username和password 提示 Login Successed #(推送完成进行后退出) docker logout #推送 docker push zhangyongyuan/guignginx:v1.0
推送完成后使用
#查看 docker ps #删除 docker rm -f 容器id前三个 #查看 docker images #删除 docker rmi 容器id #拉取提交后的容器 docker pull zhangyongyuan/quignginx:v1.0 #查看 docker images #启动 docker run -d -p 80:80 zhangyongyuan/guignginx:v1.0 #查看 docker ps
挂载
#查看 docker ps 或 docker ps -a #删除 docker rm 容器id #查看下载的镜像 docker images 进入容器内部修改 #进行容器内部的系统、修改容器内容 docker exec -it 容器id /bin/bash #数据到外部修改ro(只读)rw;(读写) docker run --name=mynginx -d --restart=always -p 88:80 -v /data/html:/usr/share/nginx/html:rw nginx
#修改页面只需要去主机的/data/html
扩展
#查看docker日志 docker logs 容器id #进入docker容器 docker exec -it 容器id /bin/bash #docker经常修改nginx配置文件 docker run -d -p 80:80 \ -v /data/html:/usr/share/nginx/html:ro \ -v /data/conf/nginx.conf:/etc/nginx/nginx.conf \ --name mynginx-02 \ nginx #/data/conf/nginx.conf nginx.conf是一个目录必须是一个文件才可以所以最好提前在本地建好后在挂载Docker #把容器指定位置的东西复制出来 docker cp 容器id:/etc/nginx/nginx.conf /data/conf/nginx.conf docker cp #把外面的内容复制到容器里面 /data/conf/nginx.conf 容器id:/etc/nginx/nginx.conf
标签:原生,容器,学习,nginx,yum,镜像,docker,id 来源: https://www.cnblogs.com/aimangguo/p/16409068.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。