文章目录
1、docker基础入门
1.1 docker版本分两种
- docker-ee 商业版-收费
- docker-ce 社区版-免费[只能用于centos]
1.2 虚拟化分为两类
- 主机虚拟化:
全虚拟化:硬件>虚拟化产品>虚拟机
半虚拟化:硬件>系统>虚拟化产品>虚拟机 - 容器虚拟化:硬件>系统>虚拟机
- 容器主要用来隔离与主机上的:
①UTS(主机名和域名)
②mount文件挂载
③IPC共享文件
④PID进程树
⑤user用户
⑥network(ip) - 命名空间(Namespaces):Linux利用该技术进行隔离,每个容器都有自己独特的命名空间。
- 控制住(CGROUP):是Linux中的一个特性,可以对容器内的内存、CPU、磁盘IO资源限制;
提供的功能有:
① 资源限制(Resource Limitting)组可以设置为不超过设定的内存限制。比如:内存子系统可以为进行组设定一个内存使用上限,一旦进程组使用的内存达到限额再申请内存,就会发出Out of Memory警告;
②优先级(Prioritization)通过优先级让一些组优先得到更多的CPU等资源;
③资源审计(Accounting)用来统计系统实际上把多少资源用到合适的目的上,可以使用cpuacct子系统记录某个进程组使用的CPU时间;
④隔离(Isolation)为组隔离命名空间,这样一个组不会看到另一个组的进程、网络连接和文件系统;
⑤控制(Control)挂起、恢复和重启等操作。
【/sys/fs/cgroup/memory/ 可以看到docker组的限制项】
1.3 安装docker
[root@king ~]# cd /etc/yum.repos.d/
//下载docker源,并改名为docker-ce.repo
curl -o docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
//因为下载国外的源,需要全部替换('s@..@..@g')改为国内的docker源(清华的源)
sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo
接着👇
配置网络源:
使用阿里云网络源网站https://developer.aliyun.com/mirror/
//安装网络源时,要把yum本地源移走,才可安装不冲突
[root@king yum.repos.d]# mv CentOS-Linux-* /tmp
[root@king yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
[root@king yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@king yum.repos.d]# yum clean all
28 files removed
[root@king yum.repos.d]# yum makecache
//docker只能在centos上使用(都是免费的)
[root@king yum.repos.d]# yum -y install docker-ce
//安装完,可以查看docker组的限制项有哪些
[root@king ~]# cd /sys/fs/cgroup/memory/
[root@king memory]# ls
1.4 LXC
LXC是管理Linux的容器,使用它需要配置复杂的内核系统,比较繁琐,即后出现docker,可以说docker是LXC的增强版。
1.5 docker概念
①docker是容器技术的一个前端工具。
②docker的工作方式:一个容器只运行一个进程。
③容器分为可写层和可读层,如果要输入数据不能直接在容器中输入,必须先挂载容器再在可写层上输入内容。在容器的使用中,我们应以有状态(有数据)为耻,以无状态(无数据)为荣。删除容器时,可写层内容也会删除。
④docker自家出了libcontainer,如今基本已经都使用libcontainer容器。
2、docker基础用法
2.1 docker中容器有
LXC libcontainer runC
docker提供了一个专门容纳容器镜像的站点:https://hub.docker.com
2.2 安装docker之后的安装加速器
docker-ce配置文件:/etc/docker/daemon.json ——此文件默认不存在,需要配置
[root@king ~]# mkdir /etc/docker
[root@king ~]# ls /etc/d
dbus-1/ default/ depmod.d/ dhcp/ dnf/ docker/ dracut.conf dracut.conf.d/
[root@king ~]# ls /etc/docker/
[root@king ~]# cd /etc/docker/
//加速器(镜像源)
[root@king docker]# vim daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}
[root@king docker]# systemctl restart docker
//查看系统级详细信息
[root@king docker]# docker info
Registry Mirrors:
https://docker.mirrors.ustc.edu.cn/
Live Restore Enabled: false
//也可加入多个加速器镜像,用逗号和双引号隔开
[root@king docker]# vim daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/","https://registry.docker-cn.com"]
}
[root@king docker]# systemctl daemon-reload //重新加载程序
[root@king docker]# systemctl restart docker //重启docker
[root@king docker]# docker info
Registry Mirrors:
https://docker.mirrors.ustc.edu.cn/
https://registry.docker-cn.com/
Live Restore Enabled: false
中国镜像加速器:https://registry.docker-cn.com
中国科技大学加速器:https://docker.mirrors.ustc.edu.cn/
阿里云的加速器镜像获取需要先注册才可使用。
2.3 docker的常用命令
适用于镜像命令:
docker search +镜像名:在Docker Hub中搜索镜像,如[root@king ~]# docker search httpd
docker pull +镜像名:把镜像从Docker Hub拉下来用,如果没有写镜像版本,默认拉最新版本
docker images:查看本地所有已有的镜像
[root@king ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest 73b8cfec1155 2 weeks ago 138MB
docker image rm +镜像名(或镜像ID):删除某一个或多个镜像
适用于容器的命令:
docker create +要创建的容器镜像名:创建某个容器
[root@king ~]# docker create httpd
2db0a6b53e48c656868d1c5aaf6f11a45a4e63989026b7c659b4f5debbedc7c8
docker ps -a:查看所有的容器状态
docker ps:只能查看已开启的容器
[root@king ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2db0a6b53e48 httpd “httpd-foreground” 4 minutes ago Created focused_goldstine
docker start +容器id(或容器名):开启一个或多个容器运行
[root@king ~]# docker start 2db0a6b53e48
2db0a6b53e48
[root@king ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2db0a6b53e48 httpd “httpd-foreground” 30 minutes ago Up 6 seconds 80/tcp focused_goldstine
docker stop +容器id(或容器名):停止一个或多个在运行的容器
docker kill +容器id(或容器名):杀死(=停止)一个或多个在运行的容器(容器只是被停止,同上条命令作用相同)
docker restart +容器id(或容器名):重启某个容器
docker rm +容器id(或容器名):删除一个容器或多个容器(但必须先停止运行容器)
docker rm -f +容器id(或容器名):强制删除容器
[root@king ~]# docker rm 2db0a6b53e48
Error(报错) response from daemon: You cannot remove a running container 2db0a6b53e48c656868d1c5aaf6f11a45a4e63989026b7c659b4f5debbedc7c8. Stop the container before attempting removal or force remove//移除容器之前先停止容器运行
[root@king ~]# docker rm -f 2db0a6b53e48
2db0a6b53e48
[root@king ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker run +镜像名:如果本地没有该镜像,它会从网络直接拉取镜像下来然后创建成容器直接运行
如果ctrl+c结束运行,容器的状态就会也停止。
docker info:查看所有容器的详细信息
docker inspect +容器id:查看某个容器的详细信息
docker attach +容器id:连接到一个已经运行的容器,如果按crtl+c结束,容器状态也会随之停止
docker exec -it +容器id +指定登录shell:在正在运行的容器中运行命令,用终端的模式给指定shell运行
在其中运行命令就算exit退出,容器也不会停止运行。
docker logs +容器id:查看容器日志
3、docker镜像制作生成
1、先要拉取个镜像到本地
[root@king ~]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
b71f96345d44: Pull complete
Digest: sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
2、把镜像运行成容器并修改它的名字和指定登录shell并进行内容修改,例如
3、在创建镜像时,不能退出终端,需要复制另起一个窗口执行命令,例如
docker commit +[参数]命令用法 |
---|
-a、 ----作者(例如,“John Hannibal Smithhannibal@a-team.com) |
-c、 ------更改列表将Dockerfile指令应用于创建的镜像 |
-p、 ------提交期间暂停容器(默认为true) |
-m、 -------消息字符串提交消息 |
4、创建完镜像,此时要在Docker Hub网站中创建自己的仓库,名字要和终端上创建的容器名一样,如b1
5、创建完仓库后,要在本地终端登录docker Hub才能在本地把创建镜像推到网站中创建的仓库中去,如
6、测试使用新生成的镜像创建容器
[新生成的镜像中包含之前所写内容]
7、容器默认情况下启动的进程是sh,则需要启动的是http进程,所以要重新生成镜像并上传…[指定登录sh;-f 不使用守护进程;-h 指定家目录]
上传镜像:[root@king ~]# docker push tangq123456/b1:v0.1.2
8、再使用新生成的镜像,运行生成容器
[root@king ~]# docker run --name w2 -d tangq123456/b1:v0.1.2 //(-d 打印id)
22cc8e74f8dfc4224886e3320914718e8940ac55f9b2083a20f4d71ad588f3ec
[root@king ~]# curl 172.17.0.2 //使用curl访问IP,查看是否访问网页
Hello summer~~ //成功访问
[root@king ~]#
4、docker镜像的导入/导出
1、先导出镜像
docker save -o myimages.gz tangq123456/b1
2、将打包压缩的A主机上的镜像,使用scp拷贝到B主机上
3、再另一台主机上进行导入镜像文件
docker load -i myimages.gz