序言
莫名其妙被送上了运维这行,对于linux各种命令懵圈,还有什么zookeeper,kafka,k8s,docker。🐢🐢我听都没听说过一阵头大。万事不决!开摆~!
摆着也不行,要不然饭碗都没了。
学习linux前,还得配个虚拟机啥啥的。好的,这就是这一周的任务了,yes!这不算划水吧。“拖下去打死。” 喂!,在听我解释解释。
在学习linux不知道有这条鲸鱼之前,安装redis,mongodb等等,我只有苦逼的一个一个慢慢安装配环境,看着长篇大幅的文章。好死不死的,欸,还很大几率弄不通,哦豁,解决了还好,没解决给我的选择我只想到重装虚拟机了,哈哈哈哈。
简介
目的:解决运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
对比:docker与传统虚拟化不同,它的应用进程直接运行在宿主机的内核,它没有自己的内核且没有进行硬件虚拟。所以它比传统的虚拟机更轻便。它的每个容器之间相互隔离,互不影响。
组成:
- 镜像(images):一个镜像可以创建很多容器,相当于一个模板。
- 容器(container): 是镜像的运行实例,容器之间相互隔离。
- 仓库(repository):存放镜像文件的场所
安装
前置条件:centos7及以上
yum安装gcc相关
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
更新
yum makecache fast
安装docker-ce
yum -y install docker-ce docker-ce-cli containerd.io
启动docker
systemctl start docker
验证
docker version
常用命令
太干呐,建议结合案例看
启动docker
systemctl start docker
停止docker
systemctl stop docker
重启docker
systemctl restart docker
查看dokcer状态
systemctl status docker
开机启动
systemctl enable docker
查看docker信息
docker info
查看帮助文档
docker --help docker 命令 --help
列出本地镜像
docker images
查找dockerhub的镜像
docker search 某某某
拉取镜像
docker pull 某某某
查看镜像/容器/数据卷所占空间
docker system df
删除镜像
docker rmi 某某某 -f强制
新建启动容器
docker run 选项 镜像:版本号
-i: 交互模式运行容器
-t:给容器重新分配一个伪终端
-d:后台运行
-p:宿主机端口:容器端口
-P:随机
--name:容器取名
示例
交互式容器
docker run -it --name centos1 centos bash
守护式容器
docker run -d redis
列出正在运行容器
docker ps 选项
-a 所有
-q 静默模式,只显示容器编号
-l 最近创建
-n 显示最近n个创建的容器
启动已停止的容器
docker start 容器ID或容器名
重启容器
docker restart 容器ID或容器名
停止容器
docker stop 容器ID或容器名
强制停止容器
docker kill 容器ID或容器名
删除容器
docker rm 选项 容器ID或容器名(已经停止的) -f强制
查看容器日志
docker logs 容器ID或容器名
查看容器内运行的内存
docker top 容器ID或容器名
查看容器内部
docker inspect 容器ID或容器名
进入正在运行的容器中
docker exec -it 容器ID或容器名 bash 常用
docker attach 容器ID或容器名
导出导入容器
docker export 容器ID > 文件名.tar.gz
cat 文件名.tar.gz | docker import - 镜像名字:版本号
save和load的保存和载入
拷贝容器内文件
docker cp 容器ID:容器内路径 目的主机路径
镜像
简介:是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。
下载镜像时可以看到文件在一层层的下载,UnionFS联合文件系统,是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。
容器数据卷
在新建启动容器时参数v将容器内文件数据挂载到宿主机的磁盘中
优点:
- 数据卷在容器之间可以共享或重用数据
- 卷中的更改可以直接实时生效
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
实例:
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 容器名或容器ID
比如 --privileged=true获取root权限。挂载的文件目录没有会自动创建,如果没有root权限的话,嘿嘿嘿
docker run --name nginx1 -d -p 4040:80 --privileged=true \
-v /dzz/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /dzz/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /dzz/nginx/html:/usr/share/nginx/html \
-v /dzz/nginx/logs:/var/log/nginx -d nginx
--privileged=true获取root权限
--restart=always 跟着docker启动而启动
卸载
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
案例实操nginx
配置镜像加速器(可选)
主要是怕拉取镜像时超时
配置一个镜像加速器服务
登录阿里云官网注册一个账户
进入主页
注册个人,体验一下
根据操作文档操作
可以进入主题了
开整
查看nginx
docker search nginx
拉取nginx,我这是拉取默认的最新,需要特定版本就需要在nginx:版本号
docker pull nginx
查看docker下载的nginx镜像
docker images
将nginx运行至后台服务
docker run -d --name nginx1 -p 4040:80 nginx
查看容器
docker ps
外网访问一下 ip:4040端口
今天儿可以好好奖励下自己了!
站住!还不慌,在折磨下,还没完。
你也不想每次还要跑到容器里配置nginx吧,那么~桀桀桀桀桀
来吧~开始
强制删除nginx1,我喜欢快的。还可以先stop容器再rm
docker rm -f nginx1
看看还有没,验下尸
docker ps -a
首先我们需要去创建个文件夹配置nginx.conf
什么?你问我为什么自己去创建配置。
都是一把辛酸泪
mkdir /dzz
cd /dzz
mkdir nginx
cd nginx
vim nginx.conf
nginx.conf,喜闻乐见的粘贴复制
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
创建并且运行容器nginx
docker run --name nginx1 -d -p 4040:80 --privileged=true -v /dzz/nginx/nginx.conf:/etc/nginx/nginx.conf -v /dzz/nginx/conf/conf.d:/etc/nginx/conf.d -v /dzz/nginx/html:/usr/share/nginx/html -v /dzz/nginx/logs:/var/log/nginx -d nginx
检查下
docker ps
还可以看挂载是否成功
docker inspect 容器或容器ID
现在打开ip:4040看看
哈哈哈哈,不会有人是403吧~
现在还差临门一脚
去挂载的html下面
vim index.html
进入编辑输入hello world
现在看看
做好,上菜!