docker安装使用和基本用法
2021/5/7 10:29:55
本文主要是介绍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网桥起到了至关重要的作用。物理网桥是标准的二层网络设备,标准物理网桥只有两个网口,可以将两个物理网络连接在一起。效果如下图
-
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安装使用和基本用法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19Docker-Compose容器集群化项目实战:新手入门指南
- 2024-11-19Docker镜像仓库项目实战:新手入门教程
- 2024-11-19Docker容器化部署项目实战:新手入门教程
- 2024-11-19Docker-Compose容器集群化资料入门教程
- 2024-11-19Docker镜像仓库资料详解:新手入门教程
- 2024-11-19Docker容器化部署资料:新手入门指南
- 2024-11-19Docker-Compose容器集群化教程:从入门到实践
- 2024-11-19Docker镜像仓库教程:新手入门指南
- 2024-11-19Docker容器化部署教程:初学者指南
- 2024-11-18Docker-Compose容器集群化入门教程