天天看点

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

目录

###docker安装###

###docker镜像管理###

###docker file创建nginx###

###docker容器管理###

###docker端口映射###

###FAQ###

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

###docker安装###

1、安装yum源,删除旧版本

[[email protected] ~]# cd /etc/yum.repos.d/

[[email protected] ~]# wget https://download.docker.com/linux/centos/docker-ce.repo

[[email protected] ~]# yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate dockerlogrotate docker-engine

2、安装社区版docker

[[email protected] /]# yum install -y docker-ce

[[email protected] /]# systemctl enable docker 

[[email protected] /]# systemctl start docker

[[email protected] /]# docker -v 

Docker version 19.03.6, build 369ce74a3c

3、docker client和daemon分离

#修改docker启动⽅式,要求加载配置⽂件启动

[[email protected] /]# systemctl stop docker

[[email protected] /]# sed -i.bak '/^ExecStart=/c\ExecStart=\/usr\/bin\/dockerd' /usr/lib/systemd/system/docker.service

#设置docker配置⽂件,默认没有,设置tcp允许连接,socket自身连接

[[email protected] ~]# cat /etc/docker/daemon.json 

{  "hosts":  ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]  }

#重载docker服务、重启docker⽣效配置

[[email protected]_manage01 ~]# systemctl daemon-reload

[[email protected]_manage01 ~]# systemctl restart docker

#客户端连接docker daemon,执⾏命令

[[email protected]_node1 ~]# docker -H 192.168.192.128 images

###docker镜像管理###

镜像仓库搜索、下载、查看、详细信息、删除、标签修改、导出、导入、管理命令

[[email protected] ~]# docker search centos

[[email protected] ~]# docker pull centos(FAQ1)

[[email protected] ~]# docker images

[[email protected] ~]# docker inspect centos

[[email protected] ~]# docker rmi centos

[[email protected] ~]# docker tag centos:latest centos:v1

[[email protected] ~]# docker save -o centos_base.tar centos

[[email protected] ~]# docker load -i centos_base.tar

[[email protected] ~]# docker image --help

###docker file创建nginx###

[root@manage01 ~]# wget http://nginx.org/download/nginx-1.17.0.tar.gz

[[email protected] ~]# 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;"'

#执行

[[email protected] ~]# docker build -t centos-nginx:v1 .

###docker容器管理###

容器命令:查看、详细信息、前后台创建执行、删除、执行命令、前台信息输出、top信息、暂停、恢复、

重命名、查看端口映射、打印日志、容器导出为镜像、容器镜像导入镜像库、退出、挂载数据卷(可做共享目录,日志保存等)

[[email protected] ~]# docker ps

[[email protected] ~]# docker inspect [容器名称或者ID]

[[email protected] ~]# docker run -it --name centos7_5 centos /bin/bash || docker run -d --name centos7_6 centos

[[email protected] ~]# docker rm aafd2e0f68cc --force

[[email protected] ~]# docker exec  -it centos7_5 ls(-it伪终端)

[[email protected] ~]# docker attach centos7_5 

[[email protected] ~]# docker top  centos7_5 

[[email protected] ~]# docker pause  centos7_5

[[email protected] ~]# docker unpause centos7_5

[[email protected] ~]# docker rename  centos7_5 centos7.5

[[email protected] ~]# docker port  centos7.5

[[email protected] ~]# docker logs centos7.5

[[email protected] ~]# docker export -o centos7.tar centos7.5

[[email protected] ~]# docker import centos7.tar centos7.5v1:v1

[[email protected] ~]# exit   or  ctrl p+ ctrl q (不消亡容器进程)

[[email protected] ~]# docker run -it -v /data:/haha --name centos7_5 centos /bin/bash  

###docker端口映射###

创建镜像和容器

[[email protected] /]# docker pull centos

直接使用bash创建容器后,报错systemctl未知

[[email protected] /]# docker run --privileged -it -d  --name centos-lnmp centos  /usr/sbin/init

[[email protected] /]# docker exec -it centos-lnmp bash

[[email protected] /]# yum install -y nginx

FAQ:安装好nginx后,docker run命令添加端口映射失败,只有在创建容器时候才能定义端口映射,目前解决方法为

1、将容易打包为镜像;2、导入镜像;3、重新创建容器并指定规则;4、查看结果。还有一种修改配置文件方法自行搜索。

[[email protected] /]# docker export -o lnmp.tar centos-lnmp

[[email protected] /]# docker import lnmp.tar hahaha:v1

[[email protected] /]# docker run --privileged -it -d  -p 8888:80  --name hahaha-lnmp hahaha:v1  /usr/sbin/init

[[email protected] /]# docker exec -it hahaha-lnmp bash

[[email protected] /]# 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包尝试。