docker容器

发布时间 2023-07-14 20:19:41作者: 枫飘过的天1

1.docker简介

通过内核虚拟技术,来提供资源隔离和安全保障

开源的应用容器引擎go语言开发,源代码托管在githup,一次编译、到处运行。

组成:server端和client端(C/S架构),server挂掉所有服务挂掉(弊端)

Docker组件

镜像(image):一个只读模板可是完整的操作系统

容器(container):启动的Linux简化版系统    

仓库(repository)存放镜像文件

Docker Hub 官方维护仓库    docker pool 国内镜像

Docker特点:简化配置 一次配置到处运行、代码流水线管理、提升开发效率、应用隔离、服务器群整合、多用户环境、快速部署

3. docker镜像

查看 images/ 搜索 search/ 获取 pull/ 删除 rmi/ 导出 save/ 导入 load

docker images   //查看镜像      docker search   //搜索镜像

docker pull 镜像名      //获取(下载镜像文件),没有则安装

dokcer rmi 镜像ID     //删除镜像(docker rmi -f 镜像ID   //强制删除) 删除镜像前先删除镜像中所有容器(dokcer rm 容器ID)

docker save centos > /opt/centos.tar.gz     //导出一个镜像

docker load < /opt/centos.tar.gz           //导入一个镜像

systemctl restart  docker.service 启动docker服务

4. docker容器

查看 ps -a/ 启动 run/ 停止 stop/ 进入容器 exec/ 

删除 rm/ 查看容器ID ps -a -q

docker ps -a   //查看所有容器,运行或关闭的

dokcer ps -a -l  //查看容器,(-a 显示所有容器,docker ps 只显示运行的容器)

docker run --name -h hostname (或docker start 容器ID)  //启动容器

docker stop 容器ID   //停止容器

Docker exec 容器ID (或 docker attach 容器ID)推荐nsenter  //进入容器

Docker rm 容器ID    //删除容器(删除前需要管理) (或docker rm -f 容器ID  //可以删除运行的容器,慎用)

dokcer ps -a -q    //查看容器ID, docker kill $(docker ps -a -q)  //杀死所有运行的容器ID

例子:docker run --name mydocker -it centos /bin/bash     (//--name 指定命令,-i 打开,-t -t  分配一个伪终端  //进入容器)

5. docker网络

Docker run -d -P nginx    //随机端口映射  (docker logs 容器ID  //查看Nginx日志)

指定端口映射:

-p  主机端口:容器端口

-p  ip:主机端口:容器端口  

-p  ip::容器端口

-p  主机端口:容器端口:UDP   (指定协议)

例子:docker run -d -p 81:80 nginx   //指定端口,主机81端口映射容器80端口

6. docker存储

数据卷:

-v  /data        //自动挂载

-v  src:dst       //指定挂载路径(源:目标)

例子:docker run -it --name volume-test -v /data centos     

 //docker容器创建数据卷/data

/var/lib/docker/volumes  查看挂载路径,挂载到物理机该路径下

(docker inspect 容器ID   //查看挂载路径,所有信息)。 

例子:挂载时可指定权限

docker run -it --name volume-test1 -v /opt:/opt centos  

//docker容器指定挂载路径(映射)

docker run -it --name volume-test1 -v /opt:/opt:ro centos  //ro 只读,rw 读写

docker run -it -v ~/.bash_history:/.bash_history  centos  //挂载

数据卷容器:

让一个容器访问另一个容器的卷  --volumes-from

docker run -d --name nfs -v /data centos 

//先起一个容器挂载/data目录,作为数据卷容器(-d  创建直接启动)

docker run -it --name test --volumes-from nfs centos    //创建数据卷容器

好处:后期不挂载,多个容器直接指向一个容器(数据卷容器,容器停止还是可以访问)

7.dockerfile

docker build /opt/nginx/Dcokerfile    //构建镜像,纯文本文件

镜像构建语法:

FROM         基础镜像(它的妈妈) --第一条指令

MAINTAINER   维护者信息(创造者)

RUN          命令前加run(你想让他干啥)

ADD          copy文件,会自动解压(往肚子里放文件)

WORKDIR      当前工作目录(相当于Cd)

VOLUME       目录挂载(存放行李的地方)

EXPOSE        端口(要打开的门是啥)

RUN          进行要一直运行下去(奔跑吧,兄弟)

制作镜像:

dcoekr commit -m "my nginx"  镜像ID  huchao/mynginx:v1

(huchao/mynginx 仓库名     v1:tag,版本)

 

例子:vi /opt/nginx/Dockerfile 

#This dcoker file

#VERSION

#Author: HU CHAO

#Base image

FROM centos

 

#Maintainer

MAINTAINER chao.hu  huhcao@189.com

 

#Commands

RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-rease-latest-7.noarch.rpm

RUN yum -y install nginx

ADD index,htl /usr/share/nginx/html/index.html

RUN echo "daemon:" >> /etc/nginx/nginx.conf

EXPOSE 80

CMD["nginx"]

8.私有仓库

Dockerhub   -->github

docker registry(私有) --> gitlab(私有)

Docker pull  registry           //安装私有仓库

docker run -d -p 5000:5000  registry       //运行容器

docker tag huchao/mynginx:v3 192.168.8.130:5000/huchao/mynginx:latest

9.Docker-compose

负责对docker容器集群的快速编排

将管理的容器分为三层:工程(project)、服务(service)、容器(container)

工程配置文件默认为:docker-compose.yml

docker-compose Python语言编写,调用docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持docker API,就可以在其上利用compose进行编排

安装:yum -y install epel-release  && yum -y install python-pip

pip install --upgrade pip   //更新pip 

Pip install docker-compose  //安装docker-compose

Docker-compose version   //查看版本

常用命令:

Docker-compose up  

Docker-compose ps    //列出项目中所有容器

Docker compose stop  //停止正在运行的容器,可以通过docker-compose start 再次启动

docker-compose down   //停止或删除容器、网络、卷镜像

docker-compose rm  //删除所有(停止状态的)服务容器

Docker-Compose标准模板文件应该包含version、services、networks 三大部分,最关键的是services和networks两个部分