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 后面可以加的参数表
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是很强大的,我这只是皮毛,请浏览他人的博客继续学习