首页
动态
时间轴
归档
友链
关于
Search
1
Spark在Yarn模式下提交未找到驱动
10,699 阅读
2
Spark提交任务内存不足
10,284 阅读
3
Flink集群搭建--Yarn模式
9,775 阅读
4
Spark SQL函数总结
8,503 阅读
5
Flume应用--日志采集
7,196 阅读
日常
大数据
经验分享
技术总结
登录
Search
标签搜索
bigdata
Hive
Spark
hadoop
Flume
建站
Flink
linux
Mysql
sqoop
Yarn
摸鱼
羊毛
docker
VMware
图床
sql
function
清泓
累计撰写
39
篇文章
累计收到
---
条评论
首页
动态
后台
栏目
日常
大数据
经验分享
技术总结
页面
时间轴
归档
友链
关于
搜索到
1
篇
docker
的结果
2022-05-12
docker学习总结
{mtitle title="docker学习总结"/}{lamp/}{card-describe title="前言"} 因为比赛涉及到了docker,所以粗略的学习了下这门技术。先说说docker的概念吧,官方说明是这样的: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 按照我的理解,docker是将我们的程序,以及程序的相关依赖以镜像的形式保存,以容器的形式使用,镜像相当于程序的一个备份,使用这个镜像可以创建无数个相应的容器,程序被容器包裹,不受外界影响,可以移植到其他环境中。 写这篇博客的目的就是为了总结在学习docker的过程中遇到的一些问题,以及对docker常用的命令总结{/card-describe}docker的安装与卸载{dotted startColor="#34ea74" endColor="#a2fa1e"/}我在学习过程中使用了Ubuntu和CentOS7安装docker,安装命令如下:Ubuntu docker可以使用多种方式安装,这里只记录较为方便的官方自动安装脚本的方式使用官方自动安装脚本 使用官方自动安装脚本是最简单的一种安装方式了,可以避免一些问题的出现 命令行输入:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun如果出现命令未找到,那可能是没有安装curl,在命令行中输入apt-get install -y curl进行安装之后,在输入上述命令即可;如果是权限不足,则在命令前使用sudo提权卸载删除安装包sudo apt-get purge docker-ce删除镜像、容器、配置文件等内容sudo rm -rf /var/lib/dockerCentOS CentOS安装docker与Ubuntu差别不大官方自动安装脚本命令行输入:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun卸载删除安装包sudo apt-get purge docker-ce删除镜像、容器、配置文件等内容sudo rm -rf /var/lib/docker{dotted startColor="#ff6c6c" endColor="#1989fa"/}docker的使用docker配置镜像源站 国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:网易 http://hub-mirror.c.163.comDocker中国区官方镜像 https://registry.docker-cn.com中国科技大学 https://docker.mirrors.ustc.edu.cn阿里云容器服务 https://cr.console.aliyun.com/(需要在首页点击“创建我的容器镜像” 得到一个专属的镜像加速地址,类似于“https://1234abcd.mirror.aliyuncs.com”)只需要使用vim编辑修改/etc/docker/daemon.json配置文件加入以下内容{ "registry-mirrors": ["加速地址"] }即可更换镜像源站,开启镜像加速docker镜像使用 运行容器时,如果使用的镜像在本地不存在,那么就会从docker镜像仓库中下载,如果没有配置镜像源站,默认是从Docker Hub公共镜像源进行下载下面列出常用的操作镜像的命令列出本地仓库镜像 docker images相关项说明:REPOSITORY:表示镜像的仓库源TAG:镜像的标签IMAGE ID:镜像IDCREATED:镜像创建时间SIZE:镜像大小同一个仓库源会有多个TAG,用来代表这个镜像的不同版本,就以mysql为例,mysql仓库源里会有5.7、8.2等不同版本,所以使用了REPOSITORY来标识镜像,TAG标识版本如果不指定镜像TAG,则默认从仓库中拉取最后一个版本的镜像,同样以mysql为例,不指定TAG,则拉取的mysql为mysql:latest拉取镜像 使用镜像创建容器时,如果镜像不存在会从仓库源中拉取,而我们也可以主动从仓库源中拉取镜像,这时就需要使用docker pull命令了docker pull搜索镜像 直接在各个镜像源站搜索镜像的方式就不用多说了,这里记录一下使用docker search命令的方式搜索镜像。比如说,我需要一个httpd的镜像,那就可以使用docker search命令具体命令如下:[root@GokouLuli999 ~]# docker search httpdNAME: 镜像仓库源的名称DESCRIPTION: 镜像的描述OFFICIAL: 是否docker官方发布stars: 类似Github里的 star,表示点赞AUTOMATED: 自动构建。删除镜像镜像的删除比较简单,镜像删除使用 docker rmi 命令,比如删除 hello-world 镜像:docker rmi hello-world创建镜像当 docker 镜像仓库中下载的镜像不能满足我们的需求时,可以通过以下两种方式对镜像进行更改。从已经创建的容器中更新镜像,并且提交这个镜像使用 Dockerfile 指令来创建一个新的镜像更新镜像更新镜像之前,我们需要使用镜像来创建一个容器。举例:[root@Gokoululi999 ~]# docker run -it ubuntu:15.10 /bin/bash参数说明:-i: 交互式操作-t: 终端ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash如果不指定镜像的版本标签,例如使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。在运行的容器内使用 apt-get update 命令进行更新。在完成操作之后,输入 exit 命令来退出这个容器。此时 ID 为 e218edb10161 的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本[root@Gokoululi999 ~]# docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2 sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8各个参数说明:-m: 提交的描述信息-a: 指定镜像作者e218edb10161:容器 IDrunoob/ubuntu:v2: 指定要创建的目标镜像名可以使用 docker images 命令来查看新镜像 runoob/ubuntu:v2:使用新镜像 runoob/ubuntu 来启动一个容器[root@Gokoululi999 ~]# docker run -t -i runoob/ubuntu:v2 /bin/bash 构建镜像使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。[root@Gokoululi999 ~]# cat Dockerfile FROM centos:6.7 MAINTAINER Fisher "fisher@sudops.com" RUN /bin/echo 'root:123456' |chpasswd RUN useradd runoob RUN /bin/echo 'runoob:123456' |chpasswd RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local EXPOSE 22 EXPOSE 80 CMD /usr/sbin/sshd -D每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。第一条FROM,指定使用哪个镜像源RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。[root@Gokoululi999 ~]# docker build -t runoob/centos:6.7 . Sending build context to Docker daemon 17.92 kB Step 1 : FROM centos:6.7 ---> d95b5ca17cc3 Step 2 : MAINTAINER Fisher "fisher@sudops.com" ---> Using cache ---> 0c92299c6f03 Step 3 : RUN /bin/echo 'root:123456' |chpasswd ---> Using cache ---> 0397ce2fbd0a Step 4 : RUN useradd runoob ......参数说明:-t :指定要创建的目标镜像名. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径使用docker images 查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec可以使用新的镜像来创建容器[root@Gokoululi999 ~]# docker run -t -i runoob/centos:6.7 /bin/bash [root@Gokoululi999 ~]# id runoob uid=500(runoob) gid=500(runoob) groups=500(runoob)从上面看到新镜像已经包含我们创建的用户 runoob。设置镜像标签可以使用 docker tag 命令,为镜像添加一个新的标签[root@Gokoululi999 ~]# docker tag 860c279d2fec runoob/centos:devdocker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签。docker容器使用我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项可以通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。获取镜像如果我们本地没有 ubuntu 镜像,可以使用 docker pull 命令来载入 ubuntu 镜像docker pull ubuntu启动容器以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器docker run -it ubuntu /bin/bash参数说明:-i: 交互式操作。-t: 终端。ubuntu: ubuntu 镜像。/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。要退出终端,直接输入 exit更多参数:运行一个容器docker run -it -p 8088:8088 -p 8089:8089 -p 8090:9090 -v /root/soft/docker:/root/soft/docker -v /root/soft/dockertt:/root/soft/dockertt loen/rc /bin/bash命令的格式:Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]-a--attach=[] 登录容器(以docker run -d启动的容器)-c--cpu-shares=0 设置容器CPU权重,在CPU共享场景使用--cap-add=[] 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities--cap-drop=[] 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities--cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法--cpuset="" 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU-d--detach=false 指定容器运行于前台还是后台--device=[] 添加主机设备给容器,相当于设备直通--dns=[] 指定容器的dns服务器--dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件-e--env=[] 指定环境变量,容器中可以使用该环境变量--entrypoint="" 覆盖image的入口点--env-file=[] 指定环境变量文件,文件格式为每行一个环境变量--expose=[] 指定容器暴露的端口,即修改镜像的暴露端口-h--hostname="" 指定容器的主机名-i--interactive=false 打开STDIN,用于控制台交互--link=[] 指定容器间的关联,使用其他容器的IP、env等信息--lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc时使用-m--memory="" 指定容器的内存上限--name="" 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字--net="bridge" 容器网络设置,待详述-P--publish-all=false 指定容器暴露的端口,待详述-p--publish=[] 指定容器暴露的端口,待详述--privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities--restart="" 指定容器停止后的重启策略,待详述--rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)--sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理-t--tty=false 分配tty设备,该可以支持终端登录-u--user="" 指定容器的用户-v--volume=[] 给容器挂载存储卷,挂载到容器的某个目录--volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录-w--workdir="" 指定容器的工作目录详细讲解端口暴露-P参数:docker自动映射暴露端口;docker run -d -P training/webapp //docker自动在host上打开49000到49900的端口,映射到容器(由镜像指定,或者--expose参数指定)的暴露端口-p参数:指定端口或IP进行映射;docker run -d -p 5000:80 training/webapp //host上5000号端口,映射到容器暴露的80端口docker run -d -p 127.0.0.1:5000:80 training/webapp //host上127.0.0.1:5000号端口,映射到容器暴露的80端口docker run -d -p 127.0.0.1::5000 training/webapp //host上127.0.0.1:随机端口,映射到容器暴露的80端口docker run -d -p 127.0.0.1:5000:5000/udp training/webapp //绑定udp端口网络配置--net=bridge: //使用docker daemon指定的网桥--net=host: //容器使用主机的网络--net=container:NAME_or_ID: //使用其他容器的网路,共享IP和PORT等网络资源--net=none: //容器使用自己的网络(类似--net=bridge),但是不进行配置启动已停止运行的容器查看所有的容器(包括已停止)命令如下:docker ps -a使用 docker start 启动一个已停止的容器:docker start b750bbbcfd88 后台运行在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式 docker run -itd --name ubuntu-test ubuntu /bin/bash注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec停止一个容器停止容器的命令如下:docker stop <容器 ID>停止的容器可以通过 docker restart 重启:docker restart <容器 ID>进入容器在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:docker attachdocker exec:推荐使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止attach 命令docker attach 1e560fca3906 注意: 如果从这个容器退出,会导致容器的停止exec 命令docker exec -it 243c32535da7 /bin/bash更多参数说明可使用 docker exec --help 命令查看。导出和导入容器导出容器如果要导出本地某个容器,可以使用 docker export 命令docker export 1e560fca3906 > ubuntu.tar导出容器 1e560fca3906 快照到本地文件 ubuntu.tar这样将导出容器快照到本地文件导入容器快照可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1 cat docker/ubuntu.tar | docker import - test/ubuntu:v1此外,也可以通过指定 URL 或者某个目录来导入,例如:docker import http://example.com/exampleimage.tgz example/imagerepo删除容器删除容器使用 docker rm 命令:docker rm -f 1e560fca3906
2022年05月12日
3,894 阅读
0 评论
1 点赞
首页
复制
搜索
前进
后退
重载网页