docker使用场景:


在多需求任务下,


1:我们想快速搭建一套环境,如果按照正常流程的话需要很久,但是docker可以快速交付,这也是docker与传统虚拟机的区别之一


2:我们要保证测试环境正产运行的服务到生产环境也是正常的,这里也是可以使用docker镜像,


3:一台性能很好的物理机,我们想在上面跑很多应用,如果不使用docker,对物理机来说资源消耗很大,可能会down机


docker组件

1:docker client:客户端
2:docker deamon:服务器-负责创建,运行,监控容器,构建,存储镜像,默认只响应本地主机的请求,如果要允许远程客户端请求,需要更改docker.service配置文件,在execstart后加上  -H tcp://0.0.0.0    客户端命令加  -H访问远程服务器
3:docker image:镜像
4: registry:库
5:docker  container:容器
docker-compose:(由python编写的)
负责实现对docker容器集群的快速编排(比如一个项目需要web容器,数据库容器,负载均衡容器)这个时候可以通过docker-compose.yml配置文件来定义一组相关的容器为一个项目。而dockerfile只能用来定义一个单独的容器。
它将所管理的容器分为3层:工程,服务,容器
其中工程:由compose下运行的所有文件组成,一个工程包含多个服务,一个服务包括多个容器实例

docker的安装

1:查看自己的机器是否安装docker

     yum list installed|grep docker

2:安装docker

    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun   此命令执行需要点时间,请默默等待

3:安装完毕之后设置开机自启

    systemctl enable docker

4:启动docker

    systemctl start docker

5:查看进程

    ps -ef|grep docker

docker的基础操作

首先要执行下docker login  登录docker 否则会报错你没登录,docker的账号可自行注册

1:查看当前系统有哪些镜像

docker images   (image是镜像的意思   container是容器的意思)

2:搜索docker镜像

docker search lamp

3:获取镜像

docker pull lamp    lamp后面可以带版本:lamp:v1,不带的话默认获取最新版本

4:运行镜像(运行镜像会开启一个容器,退出镜像的话那个容器还是在的,所以一直进一直退就会有很多容器残留)

docker run -itd lamp:latest  /bin/bash     其中 -i表示以交互模式运行容器    -t表示为容器重新分配一个伪输入终端    -d表示后台运行  最好加 -d参数,因为不加-d的话运行容器你执行exit退出之后此容器也就关机了,你起得服务进程也会关掉

附上docker run 后面可以加的参数表

linux 查看docker中有哪些服务 linux查看docker是否安装_centos

5:查看所有镜像是否在运行

docker ps -a    STATUS那一列的状态 up表示正在运行,后面的表示已经运行的时间,exited表示已经退出此容器

6:进入后台正在运行的容器

docker exec -it 容器ID /bin/bash          #退出后台正在运行的容器执行exit,此时容器不会停止,依旧在后台运行

docker exec -it 容器ID /bin/bash/ /root/create.sh      #在容器中运行/root/create.sh

7:停止后台正在运行的容器

docker stop 容器ID     docker start 容器ID   docker restart 容器ID

8:查看容器详情

docker inspect 容器ID

9:查看容器中正在运行的进程

docker top 容器ID

10:停止所有容器

docker stop $(docker ps -a -q)   或者  docker stop `docker ps -a -q`    其中docker ps -a -q是列出所有容器ID

11:删除容器

docker rm 容器ID    docker rm -f  容器ID  表示强制删除容器

12:批量删除所有容器

docker rm $(docker ps -a -q)   或者  docker rm `docker ps -a -q`

13:删除镜像(要先删除容器再删除镜像)

docker rmi 镜像ID        加 -f参数表示强制删除

14:批量删除镜像(要先删除容器再删除镜像)

docker rmi $(docker images -q)   

15:如果你的镜像2是在镜像1的基础上创建的,你需要先删掉2才能删掉1

16:将自己当前的linux系统制作成docker镜像

在你当前的系统中找一块大的磁盘并创建一个空目录,我是用 /media 目录,等下打包需要很大的空间

tar --numeric-owner --exclude=/media --exclude=/sys --exclude=/sys -zcvf centos-docker.tar.gz /       # --numeric是固定格式     --exclude你要排除掉你包所在的目录,sys和proc两个目录里面的内容可以不用打包

17:将tar导入到别的机器docker库

docker import centos-docker.tar.gz   centos-docker:v1    #前面是包名,后面是镜像名字和镜像标签(自行设置) 时间可能会久一点,导入完毕后执行  docker images查看镜像在不在,之后你就可以docker run进入系统操作了

18:将你修改了很多东西的容器制作成新的镜像

docker commit -a 'cainiaoke' -m 'centos-weblogic' 容器ID  新的镜像名:v1      其中 -a表示镜像作者  -m 表示镜像说明

19:利用dockerfile制作镜像    

创建一个空文件 Dockerfile   添加如下内容

FROM centos-weblogic:v1     #表示在哪个镜像文件基础上操作

RUN yum -y install chrony    #需要执行的操作

修改完保存退出在当前文件的目录下执行    docker build -t chrony:v1   会出现下面的结果

[root@cainiaoke1 media]# docker build -t chrony:v1 .
Sending build context to Docker daemon  6.197GB
Step 1/2 : FROM centos-weblogic:v1
 ---> aa7d18ad161c
Step 2/2 : RUN yum -y install chrony
 ---> Running in 4feba42e91c6
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Package chrony-3.4-1.el7.x86_64 already installed and latest version
Nothing to do
Removing intermediate container 4feba42e91c6
 ---> 98b94c59d3a9
Successfully built 98b94c59d3a9
Successfully tagged chrony:v1

可以看到成功build

docker images 查看刚刚生成的镜像

dockerfile文件说明:Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令
FROM mysql:latest 指定基础镜像
MAINTAINER kehana   指定维护者信息   
RUN yum -y install chrony   构建容器的时候在容器中执行的命令,run创建的中间镜像层会被缓存,如果不需要这些缓存可在build的时候docker build --no-cache
ADD test /root/tmp   将本地文件添加到容器中,tar文件会自动解压,可以访问网络资源,COPY就不能自动解压tar,也不能访问网络资源
CMD echo "this is test"  容器启动时才会执行的命令
LABEL version="1.0" description="这是一个web服务器" by="kehana"  标签
ENV JAVA_HOME=/a/b/c  环境变量
EXPOSE 22 指定与外界交互的端口
WORKDIR /root/tmp  指定工作目录
VOLUME  指定持久化目录
USER kehana 运行容器时的用户名

20:docker commit  和  Dockerfile  的区别

docker commit制作出的镜像文件过段时间你都不记得当时在里面了修改了啥,而使用docker build是有Dockerfile文件保留的,属于白盒操作

另外docker  commit制作的镜像你和他源镜像diff的话会看到系统自己修改了好多文件,不仅仅是你修改的那些,属于黑盒操作

端口映射
docker run -P -it 镜像:版本 /bin/bash  #将容器暴露的端口都随机映射到主机上
docker run -P 80 -it 镜像:版本 /bin/bash   #将容器的80端口随机映射到宿主机的一个端口
docker run -p 8000:80 -it 镜像:版本 /bin/bash   #将容器的80端口映射到宿主机的8080端口
docker run -p 192.168.190.1:8080:80 -it 镜像:版本 /bin/bash   #将容器的80端口映射到宿主机的8080端口
docker run -p 192.168.190.1::80 -it 镜像:版本 /bin/bash   #将容器的80端口映射到宿主机的随机端口
宿主机通过ssh连接容器:
1:在容器中安装sshd服务
2:给容器设置root密码
3:将此容器制作成一个新的镜像
4:运行此镜像并将容器的22端口映射到本地一个端口
5:在宿主机登录 ssh root@192.168.0.1 -p 端口号
从docker中cp文件至本地
docker cp 10704c9eb7bb:/root/test.text /home/vagrant/test.txt
从宿主机cp文件至docker中
docker cp  /home/vagrant/test.txt 10704c9eb7bb:/root/test.text

修改镜像源

docker镜像库是默认docker官方的,有时候我们docker pull很慢,这时我们可以切到国内的

国内的有以下这些

Docker 官方中国区:https://registry.docker-cn.com
网易:http://hub-mirror.c.163.com
中国科技大学:https://docker.mirrors.ustc.edu.cn
阿里云:https://y0qd3iq.mirror.aliyuncs.com

1:停docker服务

systemctl stop docker 
2:添加镜像源文件
vi /etc/docker/daemon.json
{
   "registry-mirrors": ["https://y0qd3iq.mirror.aliyuncs.com"]
 }

保存退出

3:启动docker 

systemctl start docker

 

 

说明:docker是很强大的,我这只是皮毛,请浏览他人的博客继续学习