docker学习笔记完整版

本文详细介绍了Docker镜像和容器的管理,包括查询、下载、备份、恢复、启动、停止、删除等操作。讨论了镜像的制作方法,使用Dockerfile创建服务镜像,以及如何对外发布容器服务。此外,还提到了容器的网络通信模式和私有仓库的配置与使用。
摘要由CSDN通过智能技术生成

docker镜像和容器的管理
docker images查询本机镜像
docker search   镜像名称       查找镜像
docker pull下载镜像     或  docker pull  镜像名称:标签
latest标签   镜像名称(文件名称)+标签(路径)=唯一         标准格式 busybox:latest
如果没写标签就是默认标签latest,调用镜像时,如果没指定也是latest
docker save 镜像名称:标签  -o 要备份的名字   docker save busybox:latest -o busybox.tar  备份镜像(导出镜像)
docker load -i 备份文件名称  恢复镜像(导入镜像)   docker load -i busybox.tar  在镜像文件目录下
docker run -it centos:latest    /bin/bash  进入容器    参数:-i交互式  -d后台运行  -t终端  --name容器名字    docker run -参数 容器名字:标签 启动命令    run=创建+启动+进入
启动nginx这样的服务类容器  docker run -itd nginx:latest   后台运行   可以ps -ef | grep nginx 查看
docker ps查看镜像情况    docker ps -a 查看所有镜像   -q只显示id  
docker inspect nginx:latest 查看镜像的信息      格式:docker inspect  镜像:标签
docker inspect  镜像id    查看镜像信息(ip)
docker rmi 名称:标签   删镜像   或docker rmi 镜像id     例子:docker rmi centos:latest
删掉nginx这样的服务的容器  docker rm 容器id     需要先stop关闭再删
docker start|stop|restart  容器id  启动|重启|关闭容器
docker rm $(前一条执行的命令)   删掉前一条命令执行的结果  docker rm $(docker ps -aq)删除id不删镜像容器
docker history  镜像名称:标签    查看镜像的制作历史
docker tag 旧镜像名称:旧标签   新镜像名称:新标签名称    docker tag busybox:latest    mosy:busybox
docker push 镜像名称:标签     上传镜像
docker  rm -f  $(docker ps -aq)    强制删掉所有的容器
有人在用的镜像你删了也只能把名字删了,只能先关闭再删
docker tag 容器id   nginx:latest    给没有名字的容器改名字标签(<none>这种无主容器)
docker run -it --name  要改的名字  容器名字:标签     创建一个有名字的容器
docker attach  你创建容器的名字(比如haha)前提是你1先用了docker run -it --name haha centos:latest创建了一个叫haha的容器  attach主要用于排错,退出就容器关闭
docker exec -it 容器id  启动命令     docker exec -it    7sssh9f   /bin/bash   
exec启动新的进程连接,退出不会导致容器关闭,自定义运行新的命令和上帝进程无关,退出而不关闭容器的快捷键ctrl+p+q
docker rm 容器id   删除容器
拷贝文件 docker cp 本机文件路径  容器id:容器内路径(上传)
docker cp 容器id:容器内路径  本机文件路径(下载)
实例:在/yum.repos.d目录下docker cp local.repo haha(自己定义的容器字):/etc/yum.repos.d/local.repo
docker cp local.repo haha:/etc/yum.repos.d/local.repo
容器的启动进程不能被关闭
容器的启动进程必须在前台运行 
什么是上帝进程?系统创建初产生的第一个进程
特点:没有父进程   PID=1   所有进程都是他的子进程,孙子进程,曾孙,玄孙进程
上帝进程死亡系统实例也就不存在了
上帝进程退出=容器关闭
容器的启动进程在后台运行不等于容器在后台运行
容器的启动服务:前台服务(-it)
一般是和用户交互的程序,比如/bin/bash,/bin/sh等
后台服务(-itd)
一般是一个程序服务,比如apache,nginx,redis等
还没写完,明天继续docker镜像的制作,有错误可以提出
占用了终端需要打开新终端就是处于前台
打开没有占用前台就是处于后台
所有服务启动都是先起一个父进程pid为1,子进程随意,子进程会杀掉父进程(上帝进程),然后上帝进程死了,容器就崩溃了,所以上帝进程必须放在前台
容器可以放在后台运行,但是启动进程(上帝进程)必须在前台运行
容器在后台运行不等于容器启动进程在后台运行
上帝进程必须放在前台运行(因为没有系统,放在后台代表死亡)


镜像名字加标签等于唯一    用这个查找或标识镜像比较方便
制作镜像方法一:
先docker run -it  centos:latest   进入一个新容器
rm -rf /etc/yum.repos.d/*.repo   删除错误文件
exit退出镜像
docker cp /etc/yum.repos.d/yum文件.repo   容器的id:/etc/yum.repos.d/local.repo    复制yum文件到容器内
docker start 容器id      开启容器
docker  exec -it  容器id   /bin/bash       进入容器
ls      cd  /etc/yum.repos.d/    进入并验证
exit退出
docker commit  容器id  镜像名字:标签     列子:docker commit  id  myos:latest      制作镜像
docker images  查看镜像
docker  history   镜像id    查看镜像是不是有四层,就是成功了

commit的局限
很容易制作简单的镜像,碰到复杂的就十分不方便,如:
需要设置默认的启动命令
需要设置环境变量
需要指定镜像开放的某些特定的端口
解决方案:
使用Dockerfile制作
类似脚本的Dockerfile文件
用于制作服务镜像

制作镜像方法二:
制作apache镜像
mkdir apache  在当前目录创建apache目录
cp  webhome.tar.gz /root/apache/     将未解压的网页文件放到apache目录下
cd apache进入
vim  Dockerfile    编写类似脚本的创建镜像文件

FROM  myos:latest           指定myos就可以省去配置yum源
RUN  yum -y install httpd  php     安装apache服务
ENV   LANG=C            设置环境变量
ADD   webhome.tar.gz  /var/www/html/      安装网页文件,会自动解压
WORKDIR  /var/www/html/            指定工作目录
EXPOSE  80                   声明开放端口
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]    容器启动命令
验证 docker run -itd myos:httpd
curl -i  http://172.17.0.2/

docker  build  -t  myos:httpd   .   启动
制作php镜像
mkdir  php    创建php目录
cd  php  进入
vim Dockerfile 编写文件

FROM  myos:latest
RUN  yum -y install  php-fpm
EXPOSE  9000
CMD  ["/usr/sbin/php-fpm", "--nodaemonize"]

docker  build -t  myos:php-fpm  .   生成镜像     .  代表当前目录下
docker images  可以查看到本机多了一个myos:httpd的和myos:php-fpm标签和镜像名字的镜像存在
后台是托管给系统,而容器没有系统,就是直接挂了

文件格式:
FROM:基础镜像
RUN:制作镜像时执行的命令,可以有多个
ADD:复制文件到镜像,自动解压
COPY:复制文件到镜像,不解压
EXPOSE:声明开放的端口
ENV:设置容器启动后的环境变量
WORKDIR:定义容器默认工作目录(等于cd)
CMD:容器启动时执行的命令,仅可以有一条CMD

生成镜像:  docker  build  -t  镜像名称:标签   Dockerfile所在目录


创建nginx镜像:
nginx一般采用编译安装,在容器内编译不容易排错也不便于管理
Dockerfile中ADD可以将一个压缩包在容器内解压释放
利用这个特性我们可以在外部编译nginx,并把编译好的文件打包,使用打包文件构建nginx镜像文件
nginx进程默认在后台运行,可以使用daemon  off;强制在前台运行

yum -y install gcc make pcre-devel  openssl-devel   装依赖和编译工具
useradd nginx  添加用户
tar -zxvf nginx-1.12.2.tar.gz   解压
cd nginx-1.12.2   进入目录
./configure  --prefix=/usr/local/nginx --user=nginx  --group=nginx  --with-http_ssl_module   编译
make  && make install   编译
如果要测试网页可以把网页文件拷贝到nginx/html目录下
mkdir nginx   创建
cd nginx   进入
cp /usr/local/nginx.tar.gz  ./     把文件送到当前下
vim Dockerfile

FROM  myos:latest
RUN  yum install -y pcre openssl  && useradd nginx    装包
ADD   nginx.tar.gz  /usr/local/      解压
EXPOSE   80    开放80
WORKDIR  /usr/local/nginx/html     指定工作目录
CMD    ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]    启动命令

docker rm -f $(docker ps -aq)   清除下没有用的镜像
docker run -itd  myos:nginx     前台启动
完成


对外发布容器服务
docker run  -itd  -p  80:80  myos:nginx
如果要变成httpd服务,就把nginx停止
没有分配的端口时,可以把内个占用端口的容器删掉
遇到删不掉的容器时,先关服务在删
可以docker stop $(docker ps -aq)

容器共享卷
docker run -itd -v 宿主机对象:容器内对象  镜像名称:标签
使用共享卷动态修改容器内配置文件  mkdir  /var/webconf
cp /usr/local/nginx/conf/nginx.conf  /var/webconf/
vim /var/webconf/nginx.conf

localtion ~ \.php${
    root    html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index   index.php;
    include   fastcgi.conf;
   }


绑定  docker run -itd -p 80:80  --name nginx -v  /var/webconf/nginx.conf:/usr/local/nginx/conf/nginx.conf  myos:nginx

验证 docker exec -it  nginx /bin/bash
cat /usr/local/nginx/conf/nginx.conf   查看php相关配置是否被映射到容器内


docker 仓库

配置192.168.1.100
yum -y install  docker-distribution  安装
systemctl enable --now  docker-distribution   启动服务
curl http://192.168.1.100:5000/v2/_catalog
{"repositories":[]}

docker 客户端配置(就是制作镜像的那个机器)
native.cgroupdriver   cgroup 驱动,docker默认cgroupfs
registry-mirrors   默认下载仓库,使用国内源快一点
insecure-registries  私有仓库地址(重点)

vim   /etc/docker/daemon.json
{
   "exec-opts":["native.cgroupdriver=systemd"],
   "registry-mirrors":["https://hub-mirror.c.163.com"];
    "insecure-registries":["192.168.1.100:5000", "registry:5000"]
}

docker rm -f  $(docker ps -eq)
systemctl restart docker   重启

上传镜像
docker tag myos:latest  192.168.1.100:5000/myos:latest
docker push  192.168.1.100:5000/myos:latest

验证测试
curl http://192.168.1.100:5000/v2/_catalog
{"repositories":["myos"]}
curl  http://192.168.1.100:5000/v2/myos/tags/list
{"name":"myos","tags":["latest"]}

docker run -it 192.168.1.100:5000/myos:latest    远程镜像启动容器

-p [可选ip]:宿主机端口:容器端口(可有多个)
docker的网络通信模式
host模式,与宿主机共享网络
container模式,共享其他容器的网络命名空间
none模式,无网络模式
bridge模式,默认模式
自定义网络,自由桥接网络或overlay网络
私有仓库概念:共享镜像的一台服务器
仓库配置文件及数据存储路径
/etc/docker-distribution/registry/config.ynl
/var/lib/registry
默认端口号5000
查看私有镜像仓库中的镜像名称或标签
名称:curl  http://仓库ip:5000/v2/_catalog
标签:curl  http://仓库ip:5000/v2/镜像名称/tags/list

在一个没有任何镜像机器上启动容器
docker  run -it  仓库ip:5000/镜像的名称:镜像的标签

为镜像创建标签后上传:
docker tag 镜像:标签   私有仓库ip:5000/镜像:标签
docker push  私有仓库ip:5000/镜像:标签

绑定端口时,端口被分配了,直接删掉那个容器就行了,这样就可以继续分配那个端口了


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值