Docker容器

docker安装使用和基本用法

本文主要是介绍docker安装使用和基本用法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、安装
1.安装docker
wget https://download.docker.com/linux/centos/docker-ce.repo -P /etc/yum.repos.d
yum install -y docker-ce
systemctl start docker
systemctl enable docker
2.安装docker-compose
yum install -y epel-release
yum install -y docker-compose --enablerepo=epel
二、镜像基本用法
1.查看官网镜像
docker search
2.下载镜像
docker pull centos
3.查看镜像
docekr images 
4.删除镜像
docker rmi
三、容器基本用法
1.启动容器
#以交互模式
docker run  --name=centos-test -it   img-name /bin/bash
#以守护模式
docker run  --name=centos-test -itd  img-name /bin/bash
#进入容器
docker exec -it continer-name /bin/bash
2.查看
docker ps #查看启动的容器
docker ps -a #查看所有容器
3.启动/停止/删除
docker start name(id)  #启动
docekr stop  name(id)  #停止
docker rm  name(id)    #删除
docker rm -f name(id)  #停止并删除容器
4.创建映射80端口的nginx
docker run --name=nginx-test1 -p 80 -itd  nginx:1.16.1 /bin/bash
docker run --name=nginx-test2 -p 10080:80 -itd  nginx:1.16.1 /bin/bash 
#-P 随机映射
#-p 指定映射,外部端口:内部端口 如:10080:80 即将宿主机的10080映射为容器内部的80端口
四、Dockerfile
1.dockerfile参数
  • FROM 可拉取的镜像
FROM centos
  • MAINTAINER 作者信息
MAINTAINER  name
  • RUN 当前镜像构建过程中的命令
RUN 
#1.shell模式
RUN <comm> (shell模式,最常用)
如:RUN /bin/bash -c command
#2.RUN [“可执行命令”,“参数1”,“参数2”](exec模式)
如:RUN [“/bin/bash”,”-c”,”echo hello”]
  • EXPOSE 暴露的端口
EXPOSE port1 port2
#EXPOSE 仅仅是暴露一个端口,一个标识,在没有定义任何端口映射时,外部是无法访问到容器提供的服务
  • CMD
CMD command param1 param2 (shell模式)

#CMD 指令的首要目的在于为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束;注意: CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
#CMD 指令:类似于 RUN 指令,用于运行程序,但二者运行的时间点不同;CMD 在docker run 时运行,而非docker build;
#每个 Dockerfile 只能有一条,如果有多条则只有最后一条被执行
  • ENTRYPOINT
# ENTRYPOINT 指令:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 
  • ADD和COPY复制
ADD <源>...<目的地>
#ADD包含类似tar的解压功能
COPY <源>...<目的地>
#如果单纯复制文件,docker推荐使用COPY
  • WORKDIR 指定工作目录
WORKDIR /root
  • VOLUME 数据持久化
VOLUME ["/data-:volume"]
#表示容器启动的数据存储在宿主机的/data-volume下
  • ONBUILD 触发器
#当一个镜像被其他镜像作为基础镜像时需要写上OBNBUILD,会在构建时插入触发器指令。
  • ENV 设置环境变量
ENV <key><value>
ENV <key>=<value>
  • USER 配置运行用户
USER nginx
USER user:group 
2.示例dockerfile
mkdir /root/dockerfile/nginx -p
cd /root/dockerfile/nginx
上传包 nginx-1.14.2.tar.gz 至 /root/dockerfile/nginx

vim dockerfile 
FROM centos:7.9.2009
MAINTAINER tom
RUN yum  install  -y pcre* openssl* gcc c++ make
ADD nginx-1.14.2.tar.gz /root
RUN cd /root/nginx-1.14.2 && ./configure  --prefix=/usr/local/nginx  --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log  --http-log-path=/var/log/nginx/access.log  --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock  --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre && make && make install
RUN useradd nginx -s /sbin/nologin
RUN mkdir /var/tmp/nginx/
RUN rm -rf /root/nginx-1.14.2
CMD /usr/local/nginx/sbin/nginx
EXPOSE 80 443

#构建
docker build -t="images-name"
如:docker build -t="harbor/library/nginx:1.14.2"
3.dockerfile模板
vim dockerfile 
FROM 
MAINTAINER 
RUN 
ADD 
RUN
RUN 
CMD 
EXPOSE 
4.构建过程
从基础镜像运行一个容器
执行一条指令,对容器做出修改
执行类似docker commit 的操作,提交一个新的镜像层
再基于刚提交的镜像运行一个新的容器
执行dockerfile中的下一条指令,直至所有指令执行完毕
五、数据管理
1.数据卷
  • 据卷是存在于一个或多个容器中的特定文件或文件夹,这个文件或文件夹以独立于 docker 文件系统的形式存在于宿主机中。

  • 数据卷特点

    • 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会被拷贝到新初始化的数据卷中
    • 数据卷可以在容器之间共享和重用
    • 数据卷的变化不会影像镜像的更新
    • 可以对数据卷里的内容直接进行修改
    • 卷会一直存在
2.容器添加数据卷
  • 通过命令添加
mkdir data-volume
docker run -v ~/data-volume:/data -itd --name="nginx-v2" -p80:10080 192.167.0.58/library/nginx:1.14.2 /bin/bash 

#添加只读权限,即在容器里只读,在宿主机可更改文件内容
docker run -v ~/data-volume:/data:ro -itd --name="nginx-v2" -p80:10080 192.167.0.58/library/nginx:1.14.2 /bin/bash 
  • 通过dockerfile添加
VOLUME ["/data-volume1"]

#查询
docker inspect  356a149ac70f

"Mounts": [
            {
                "Type": "volume",
                "Name": "9d65cec3de57c12ff6aad08cd5a08329c15529d98770703ec92856e3cf4f3163",
                "Source": "/var/lib/docker/volumes/9d65cec3de57c12ff6aad08cd5a08329c15529d98770703ec92856e3cf4f3163/_data",
                "Destination": "/data-volume1",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ]
        
#"Source" 即是宿主机文件的位置
3.镜像之间共享数据
docker run --name="nginx-vol-v2" --volumes-from  nginx-vol-v1 -itd nginx-vol:latest /bin/bash
#--volumes-from 后更要共享的容器即可共享。
#如: --volumes-from  nginx-vol-v1 即和已运行的容器nginx-vol-v1共享数据
4.数据的备份和还原
  • 备份
docker run  --volumes-from nginx-vol-v1  -v /root/backup:/backup --name="datavolume-copy" nginx:1.14.2  tar -zvcf /backup/data-volume1.tar.gz  /data-volume1

#原理:启动一个非交互的容器,共享需要备份数据的容器,然后将本地目录映射到非交互容器下,同时执行命令备份文件
  • 还原
docker run  --volumes-from nginx-vol-v1 -v /root/backup/:/backup nginx:1.14.2 tar -xvzf /backup/data-volume1.tar.gz -C /

#原理同备份
六、网络
1.四种网络模式
  • briage

    默认Docker引擎启动会在本地生成一个Docker0虚拟网卡。Docker0是一个标准Linux虚拟网桥设备。在Docker默认的桥接网络工作模式中,docker0网桥起到了至关重要的作用。物理网桥是标准的二层网络设备,标准物理网桥只有两个网口,可以将两个物理网络连接在一起。效果如下图

480344d6d47c2b11876d8916e72a03e5

  • hosts

    通常来讲,启动新的Docker容器,都会分配独立的Network Namespace隔离子系统,如果在运行是指定为host模式,那么Docker容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace子系统。新创建的Docker容器不会创建自己的网卡,不会再虚拟出自己的网卡、IP、网关、路由等信息,而是和宿主机共享IP和端口等信息,其他的软件、目录还是相互独立的。两个容器除了网络方面相同之外,其他的如文件系统、进程列表等还是相互隔离的

  • none

    None模式与其他的模式都不同,如果Docker容器使用None模式,Docker容器会拥有自己的Network Namespace子系统,但是Docker引擎并不会为新启动的Docker容器配置任何的网络信息。即新创建的Docker容器不会虚拟出自己的网卡、IP、网关、路由等信息,而是需要手工为Docker容器添加网卡、配置IP、路由等信息,在企业实战环境中,通常会使用Pipework工具为Docker容器指定IP等信息。

  • container

    Docker容器网络,Container模式是指定新创建的容器和已存在的某个容器共享一个Network Namespace子系统,而不是和宿主机共享Namespace子系统。新创建的Docker容器不会创建自己的网卡,不会再虚拟出自己的网卡、IP、网关、路由等信息,而是和指定的Docker容器共享IP和端口等信息,其他的软件、目录还是相互独立的。两个容器除了网络方面相同之外,其他的如文件系统、进程列表等还是相互隔离的。如果依附的Docker容器关闭,新的Docker容器网络也会丢失。

2.拒绝容器互联
vim /etc/sysconfig/docker
other_args="-icc=false"

#重启docker容器配置生效
这篇关于docker安装使用和基本用法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!