鲸鱼docker上桌

78 阅读6分钟

序言

莫名其妙被送上了运维这行,对于linux各种命令懵圈,还有什么zookeeper,kafka,k8s,docker。🐢🐢我听都没听说过一阵头大。万事不决!开摆~!

摆着也不行,要不然饭碗都没了。

学习linux前,还得配个虚拟机啥啥的。好的,这就是这一周的任务了,yes!这不算划水吧。“拖下去打死。” 喂!,在听我解释解释。

在学习linux不知道有这条鲸鱼之前,安装redis,mongodb等等,我只有苦逼的一个一个慢慢安装配环境,看着长篇大幅的文章。好死不死的,欸,还很大几率弄不通,哦豁,解决了还好,没解决给我的选择我只想到重装虚拟机了,哈哈哈哈。

简介

目的:解决运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

对比:docker与传统虚拟化不同,它的应用进程直接运行在宿主机的内核,它没有自己的内核且没有进行硬件虚拟。所以它比传统的虚拟机更轻便。它的每个容器之间相互隔离,互不影响。

组成:

  1. 镜像(images):一个镜像可以创建很多容器,相当于一个模板。
  2. 容器(container): 是镜像的运行实例,容器之间相互隔离。
  3. 仓库(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将容器内文件数据挂载到宿主机的磁盘中

优点:

  1. 数据卷在容器之间可以共享或重用数据
  2. 卷中的更改可以直接实时生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

实例:

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

配置镜像加速器(可选)

主要是怕拉取镜像时超时

配置一个镜像加速器服务

登录阿里云官网注册一个账户

进入主页

al1.png

al2.png

注册个人,体验一下 ali3.png 根据操作文档操作 al3.png

可以进入主题了

开整

查看nginx

docker search nginx

d1.png

拉取nginx,我这是拉取默认的最新,需要特定版本就需要在nginx:版本号

docker pull nginx

d2.png 查看docker下载的nginx镜像

docker images

d3.png 将nginx运行至后台服务

docker run -d --name nginx1 -p 4040:80 nginx
查看容器
docker ps

d4.png

外网访问一下 ip:4040端口

d5.png

今天儿可以好好奖励下自己了!

站住!还不慌,在折磨下,还没完。

你也不想每次还要跑到容器里配置nginx吧,那么~桀桀桀桀桀

来吧~开始

强制删除nginx1,我喜欢快的。还可以先stop容器再rm
docker rm -f nginx1
看看还有没,验下尸
docker ps -a

首先我们需要去创建个文件夹配置nginx.conf

什么?你问我为什么自己去创建配置。

d6.png

都是一把辛酸泪

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

d8.png 现在打开ip:4040看看

哈哈哈哈,不会有人是403吧~

现在还差临门一脚

去挂载的html下面

vim index.html
进入编辑输入hello world

现在看看

d7.png

做好,上菜!