docker浅学笔记-docker安装部署、镜像管理、容器管理、dockerfile、端口映射

       在我目前的理解中,容器是镜像创建的运行实例。镜像就像键值对的key、安装虚拟机所需要的iso文件、一所所房子;容器就像key索引对应的具体操作内容、安装成功的操作系统、每个房间功能各异的人们。


###docker安装###
1、安装yum源,删除旧版本
[root@manage01 ~]# cd /etc/yum.repos.d/
[root@manage01 ~]# wget https://download.docker.com/linux/centos/docker-ce.repo
[root@manage01 ~]# yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate dockerlogrotate docker-engine
2、安装社区版docker
[root@manage01 /]# yum install -y docker-ce
[root@manage01 /]# systemctl enable docker 
[root@manage01 /]# systemctl start docker
[root@manage01 /]# docker -v 
Docker version 19.03.6, build 369ce74a3c
3、docker client和daemon分离
#修改docker启动⽅式,要求加载配置⽂件启动
[root@manage01 /]# systemctl stop docker
[root@manage01 /]# sed -i.bak '/^ExecStart=/c\ExecStart=\/usr\/bin\/dockerd' /usr/lib/systemd/system/docker.service
#设置docker配置⽂件,默认没有,设置tcp允许连接,socket自身连接
[root@manage01 ~]# cat /etc/docker/daemon.json 
{  "hosts":  ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]  }
#重载docker服务、重启docker⽣效配置
[root@tyschool_manage01 ~]# systemctl daemon-reload
[root@tyschool_manage01 ~]# systemctl restart docker
#客户端连接docker daemon,执⾏命令
[root@tyschool_node1 ~]# docker -H 192.168.192.128 images

###docker镜像管理###
镜像仓库搜索、下载、查看、详细信息、删除、标签修改、导出、导入、管理命令
[root@manage01 ~]# docker search centos
[root@manage01 ~]# docker pull centos(FAQ1)
[root@manage01 ~]# docker images
[root@manage01 ~]# docker inspect centos
[root@manage01 ~]# docker rmi centos
[root@manage01 ~]# docker tag centos:latest centos:v1
[root@manage01 ~]# docker save -o centos_base.tar centos
[root@manage01 ~]# docker load -i centos_base.tar
[root@manage01 ~]# docker image --help


###docker file创建nginx###
[root@manage01 ~]# wget http://nginx.org/download/nginx-1.17.0.tar.gz
[root@manage01 ~]# vim Dockerfile
##定义基础镜像 FROM
FROM centos
MAINTAINER Rui
#上传⽂件到容器 COPY or ADD (FAQ2)
#COPY 从当前⽬录复制⽂件到容器. 只是单纯地复制⽂件. 
#ADD 从当前⽬录复制⽂件到容器. 会⾃动处理⽬录, 压缩包等情况
COPY nginx-1.16.1.tar.gz /usr/src
#⽣成镜像时运⾏的命令 RUN
RUN yum install -y vim gcc gcc-c++ glibc make autoconf openssl openssl-devel  libxslt-devel  gd gd-devel pcre pcre-devel&&yum clean all
RUN useradd -M -s /sbin/nologin nginx&&mkdir /data
RUN [ "mkdir","-p","/usr/local/nginx/conf" ]&&[ "mkdir","/usr/local/nginx/html" ]&&[ "mkdir","/usr/local/nginx/logs" ]&&[ "chown","nginx.nginx","/usr/local/nginx","-R" ]
#挂载本地⽬录VOLUME
#创建⼀个可以从本地主机或其他容器挂载的挂载点
#⼀般⽤来存放数据库和需要保持同步的数据
VOLUME ["/data"]
#进入目录后解包
WORKDIR /usr/src
RUN ["tar","zxf","nginx-1.16.1.tar.gz"]
#源码安装nginx
WORKDIR /usr/src/nginx-1.16.1
RUN ./configure --prefix=/usr/local/nginx  --user=nginx --group=nginx && make && make install
#清理
WORKDIR /root
RUN [ "rm","-rf","/usr/src/nginx-1.16.1"]
#定义变量 ENV
ENV PATH /usr/local/nginx/sbin:$PATH
#输出端口
EXPOSE 80
#容器启动后执⾏的命令 CMD,避免nginx退出
CMD /bin/sh -c 'nginx -g "daemon off;"'
#执行
[root@manage01 ~]# docker build -t centos-nginx:v1 .


###docker容器管理###
容器命令:查看、详细信息、前后台创建执行、删除、执行命令、前台信息输出、top信息、暂停、恢复、
重命名、查看端口映射、打印日志、容器导出为镜像、容器镜像导入镜像库、退出、挂载数据卷(可做共享目录,日志保存等)
[root@manage01 ~]# docker ps
[root@manage01 ~]# docker inspect [容器名称或者ID]
[root@manage01 ~]# docker run -it --name centos7_5 centos /bin/bash || docker run -d --name centos7_6 centos
[root@manage01 ~]# docker rm aafd2e0f68cc --force
[root@manage01 ~]# docker exec  -it centos7_5 ls(-it伪终端)
[root@manage01 ~]# docker attach centos7_5 
[root@manage01 ~]# docker top  centos7_5 
[root@manage01 ~]# docker pause  centos7_5
[root@manage01 ~]# docker unpause centos7_5
[root@manage01 ~]# docker rename  centos7_5 centos7.5
[root@manage01 ~]# docker port  centos7.5
[root@manage01 ~]# docker logs centos7.5
[root@manage01 ~]# docker export -o centos7.tar centos7.5
[root@manage01 ~]# docker import centos7.tar centos7.5v1:v1
[root@manage01 ~]# exit   or  ctrl p+ ctrl q (不消亡容器进程)

[root@manage01 ~]# docker run -it -v /data:/haha --name centos7_5 centos /bin/bash  

###docker端口映射###
创建镜像和容器
[root@node01 /]# docker pull centos
直接使用bash创建容器后,报错systemctl未知
[root@node01 /]# docker run --privileged -it -d  --name centos-lnmp centos  /usr/sbin/init
[root@node01 /]# docker exec -it centos-lnmp bash
[root@692d1b8f634a /]# yum install -y nginx
FAQ:安装好nginx后,docker run命令添加端口映射失败,只有在创建容器时候才能定义端口映射,目前解决方法为
1、将容易打包为镜像;2、导入镜像;3、重新创建容器并指定规则;4、查看结果。还有一种修改配置文件方法自行搜索。
[root@node01 /]# docker export -o lnmp.tar centos-lnmp
[root@node01 /]# docker import lnmp.tar hahaha:v1
[root@node01 /]# docker run --privileged -it -d  -p 8888:80  --name hahaha-lnmp hahaha:v1  /usr/sbin/init
[root@node01 /]# docker exec -it hahaha-lnmp bash
[root@node01 /]# docker ps

###FAQ###
1、docker仓库下载镜像到本地报错
Error response from daemon: Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fcentos%3Apull&service=registry.docker.io: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
#因为在下载官方镜像点的镜像国内访问速度太慢,所以报错添加
vim /etc/docker/daemon.json
{  "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]  }
sudo systemctl daemon-reload
sudo systemctl restart docker

2、上传文件到容器ADD报错,COPY可以,报错如下
tar: Error is not recoverable: exiting now
/或者/
failed to copy files: Error processing tar file(exit status 1): unexpected EOF
原因:
停止所有的container,删除其中的images:
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
发现需要上传的包不完整,导致解压出错,更换tar包尝试。


 

发布了64 篇原创文章 · 获赞 9 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_39855998/article/details/104448178