linux系统-docker容器

docker概念和特点

docker翻译过来就是容器,是一种操作系统层面的虚拟化技术。是对进程进行封装隔离,可以理解为一个轻量级的虚拟机。

docker是基于Linux操作系统的虚拟化技术,因此docker必定运行在Linux环境。

开源免费,操作简便,可以快速搭建各种环境。

容器包含了一整套运行时环境,比如系统所需的各种依赖、类库、配置文件等等。

虚拟机vs容器

启动:分钟级vs秒级

硬件资源:独占资源vs共享资源

硬盘占用:G vs M

性能:分钟级vs秒级

三个主要概念

仓库registry:存放镜像的地方

公有仓库:官方docker hub,所有人都可以注册、上传、下载镜像。一般我们不使用官方的,因为速度太慢,服务器在国外。所以我们目前使用的仓库是国内阿里云的。

私有仓库:个人或公司在局域网搭建的仓库,只给内部人使用,为了保密性安全性。

镜像image:用来创建容器的模板

由一系列指令一步步构建出来的一个只读文件,相当于一个模板,根据镜像可以启动一个容器。

容器docker:运行应用和进程的一个虚拟隔离环境

镜像启动运行起来就是容器,容器是一个虚拟环境,一个轻量级虚拟机。

容器可以进行的操作:启动、停止、重启、删除

容器之间是相互隔离的,在容器运行时,可以登录到容器内部进行相关操作,比如安装卸载软件等等。

镜像操作命令

查看本地的镜像,就是已经拉取下来的镜像:docker images

搜索一个镜像:docker search 镜像名,在仓库搜索

        如:docker search hello-world

        如:docker search centos:7

拉取镜像:docker pull 镜像名:标签名 (即版本号),如果不写标签名,默认会拉取最新版本

        如:docker pull hello-world:latest

        如:docker pull centos:7

上传镜像:docker push 镜像名,上传到仓库里

删除镜像:docker rmi 镜像名或id

查看某个镜像的详细信息:docker inspect 镜像名称或id

创建容器:docker run 参数 镜像名称

参数:

参数:-i:表示运行容器。

参数:-t:表示容器启动后会进入它的终端命令行环境,在容器内执行bash命令。

参数:-d:创建一个守护式容器,在后台运行,不会自动登录这个容器。

参数:-v:表示目录映射,宿主机的一个目录和容器中的一个目录映射,映射以后可以做到,其中任何一个目录变化的时候,另外一个目录跟着同步变化。主要实现数据的持久化。数据volume,也就是这里-v参数的全拼。如-v /usr/local/test:/usr/local/data 代表将主机的目录/usr/local/test跟容器中的/usr/local/data目录映射。

参数:-p:表示端口映射,前者是宿主机端口,后者是容器内部端口。

参数:-e:配置容器内的环境变量,在容器中执行命令的时候使用。

--name:指定容器名称,如果不指定名称,使用系统默认分配的容器id,也可以对容器进行操作。

--net:指定容器使用的自定义网络。

--link:通过容器名互相通信,主要解决两个容器通过ip地址通信时,ip地址容易改变的问题,格式如下:--link 容器名称或id:别名,其中,别名是源容器在link 下的别名。

创建容器案例

创建守护式容器:docker run -di --name=容器名称 镜像名称或id

登录进入守护式容器:docker exec -it 容器名称或id /bin/bash,退出使用exit

创建一个交互式容器(相当于以上两步合二为一):docker run -it --name=容器名称 镜像名称或id /bin/bash

如:docker run -it --name=hello hello-world(hello-world镜像生成的容器没有bash环境)

如:docker run -it --name=centos7 centos:7 /bin/bash

退出容器:exit

容器服务操作命令

启动、停止、重启容器服务:

语法:systemctl start/stop/restart docker,也可以写成:service docker start/stop/restart

systemctl start docker
systemctl stop docker
systemctl restart docker

查看docker服务的状态:

语法:systemctl status docker,也可以写成:service docker status

systemctl status docker

查看docker概要信息:

语法:docker info

docker info

查看docker版本信息:

语法:docker version

docker version

容器操作命令

查看运行中的容器:

语法:docker ps;加-a参数可以查看所有容器,包括没有运行的。

查看某个容器的详细信息:

语法:docker inspect 容器名称或容器id

启动/停止/重启某个容器:

语法:docker start/stop/restart 容器名称或id

删除停止的容器(先停止再删除):

语法:docker rm 容器名称或id

强制删除运行中的容器:

语法:docker rm -f 容器名称或id

进入容器并且使用容器自己的shell环境:

语法:docker exec -it 容器名称或id /bin/bash,退出使用exit

        如:登录mysql容器的shell环境 docker exec -it mysql /bin/bash

        再登录mysql:mysql -uroot-p密码

宿主机和容器之间复制文件

语法:docker cp 宿主机文件 容器名:容器路径

批量操作命令(不建议使用)

启动所有容器:

docker start $(docker ps -a)

关闭所有容器:

docker stop $(docker ps -a)

删除所有容器:

docker rm -f $(docker ps -a)

删除所有镜像:

docker rmi $(docker images)

docker数据卷volume

数据卷是一个目录或文件,为了数据持久化保存,把宿主机和容器的两个目录做绑定,我们这里的数据卷主要指的是宿主机上的目录,绑定后的两个目录,它们之间的数据保持随时同步,完全独立于容器的生命周期(容器删除,数据还在)。

数据卷映射使用-v参数:格式:-v 数据卷名称:要映射的容器中的目录。

docker会自动为容器创建数据卷目录,默认在/var/lib/docker/volumes

        如:docker run -di -v centos7-vol:/root --name=centos7 centos:7 这条命令就在创建容器的同时,在/var/lib/docker/volumes目录下创建了名为centos7-vol的数据集,绑定了容器内部的/root目录,实现了数据卷的同步。

数据卷操作命令:

查看数据卷:

docker volume ls

新建数据卷:

docker volume create 数据卷名称

查看数据卷详情:

docker volume inspect 数据卷名称

删除数据卷:

docker volume rm 数据卷名称

Dockerfile

是一个用来构建镜像的文本文件,包含了多条构建镜像所需的指令以及说明,它会基于一个基础的镜像来继续构建新的镜像。

作用优势:

可以为开发团队提供一个完全一致的开发环境。可以直接拿Dockerfile构建镜像,保证环境的一致性。

基于Dockerfile构建镜像命令:

格式:docker build -t 生成镜像的名称:标签 -f 存放Dockerfile文件的路径

参数-t:指定构建后的镜像名称

参数-f:指定Dockerfile文件所在位置

举例:docker build -t jdk1.8 .

举例:docker build -t jdk1.8 -f /home/zhangsan

Dockerfile文件使用到的一些关键字含义:

FROM 镜像名称:tag 指定了基于哪个基础镜像来继续构建镜像

MAINTAINER 创建者名称:声明这个镜像的创建者是谁

ENV :设置环境变量,可以写多条

RUN:是Dockerfile核心操作部分,就是具体的操作命令,可以写多条

ADD source path/path:将宿主机的文件复制到容器中,如果这个文件是压缩文件,同时会解压。

COPY source path/path:这个和ADD类似,区别是不自动解压

WORKDIR path:设置容器的工作目录

Dockerfile实战1:构建一个可以运行java程序的centos7镜像

首先进入/usr/local新建目录:dockerjdk8,然后把jdk-8u333-linux-x64.tar.gz通过xftp上传到此目录下,然后在此目录创建一个Dockerfile文件,文件内容如下:

#指定使用centos:7作为基础镜像启动构建流程
FROM centos:7

#指定镜像创建者信息
MAINTAINER zp

#切换容器的目录并创建目录
WORKDIR /usr
RUN mkdir /usr/local/java

#ADD 将宿主机的jdk包复制到容器中的目录中并自动解压
ADD jdk-8u333-linux-x64.tar.gz /usr/local/java/

#在容器中配置java的环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_333
ENV PATH $JAVA_HOME/bin:$PATH

最后,使用Dockerfile构建一个jdk镜像,命令:docker build -t jdk1.8 .

Dockerfile实战2:使用刚刚创建好的jdk1.8镜像,继续构造镜像,然后在其内部运行一个java程序

首先进入/usr/local新建目录:dockerhello,然后把hello.jar复制到此目录下,然后创建一个Dockerfile文件,文件内容如下:

#1.基于刚才创建好的基础镜像jdk1.8构建
FROM jdk1.8:latest

#2.维护者:格式:MAINTAINER 
MAINTAINER zp

#3.拷贝hello.jar文件到容器中的/usr/src/目录下
ADD hello.jar /usr/src/

#4.配置容器启动后,执行java命令,运行hello.jar文件
ENTRYPOINT ["java","-jar","/usr/src/hello.jar"]

最后,使用这个Dockerfile构造镜像出来,命令:docker build -t hello .

可以根据hello镜像生成容器,看下运行java程序的效果:docker run -it --name=hello-jar hello /bin/bash

基于容器生成镜像:

docker commit 容器名称或id 镜像名:tag

docker网络

创建一个自定义网络:docker network create 网络名称

查看自定义网络:docker network ls

删除自定义网络:docker network rm 网络名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值