docker简单探索

之前用的vmware虚拟机的ubuntu做开发环境,但是不知道为啥,网速很慢,然后我就去找doker用了。这里只简单记录一下。(速度慢找到原因了,我的电脑ip网段变了,而虚拟机被我设置是把主机当代理服务器用的,而且git还单独设置了,更新ip地址后一切正常了)
首先我下载了windowns桌面版,这个好像是win10才能用。
下面简单说下我对docker相关名词的印象,像镜像,容器之类的。
镜像,感觉就和装系统用的镜像是差不多的东西。当然docker好像是分层的,pull一个镜像要下好几个东西。
容器,感觉就是镜像的实例化,一个镜像可以实例化为好几个容器。
doker hub,这个感觉可以对标github了,这个里面有很多镜像,包括官方的,私人上传的–自己可以创建仓库上传你构建的镜像。
play with docker是一个在linux终端,允许你运行docker命令的交互式环境,基于云,无需下载。
数据库持久化的两种方式:命名卷和绑定挂载。命名卷的本地位置无需你指定,绑定挂载的本地位置需要自己指定
pic
这是在桌面版上绑定挂载的填写,Host Path填写本地电脑的地址,Contiainer Path填写容器里挂载的点。我刚开始没理解这个,一直没搞好,感觉还是用命令方便一点。这里的绑定挂载感觉就像是vmware虚拟机里的共享文件夹。
使用docker的好处应该就是轻量化,体积比虚拟机小的多,假如我现在需要一个ruby环境来开发,我只需要去docker hub把官方的ruby镜像pull下来,然后运行,一个ruby开发环境就搭好了,不需要你去配置各种参数,各种命令。
docker镜像还可以push,pull,使得保存/获取开发环境变得简单。
可定制化的容器构建让个性化定制成为可能。
多容器app也很神奇,多个容器可以运行不同app,可以组网,比如一个容器运行mysql,一个容器运行你的前端app。
其他的应用尚待探索。
注意:若你的电脑同时安装了vmware,可能会出现问题,此时需要禁用hype-v或更新vmware,这取决于你的win10版本。

远程访问容器

  1. 启动容器
docker run -dit -p 5000:22 --name bentutu -h bentutu --privileged=true -v D:/docker_save:/opt/xwd ubuntu

不加 --privileged=true会导致nfs挂在不了。
2. openssh-server服务配置
apt install openssh-server
sudo service ssh start
sudo update-rc.d ssh defaults
3. 免密登录
修改ssh配置文件相关配置。
把公钥拷贝到~/.ssh/authorized_keys目录,可以参考windows无法使用ssh-copy-id解决办法将windows公钥拷贝,其他平台的可以把公钥内容直接追加在这个文件后面。
4. ssh登录
然后ssh root@{宿主机ip} -p 5000就可以远程访问docker了

配置实例

docker run -it --cpus ${docker_cpu_limit} -h `hostname`_${image##*/} --dns 10.1.2.80 ${docker_opt} ${arg} -v /home/${USER}:/home/${USER} -v /home/coverity:/home/coverity:ro -v /home/jenkins:/home/jenkins:ro -v /share/${USER}:/share/${USER} -v /bin/xcp:/bin/xcp:ro -w /home/${USER} --rm --name ${USER}_`openssl rand -base64 8 | md5sum | cut -c1-8` ${image} /bin/bash -c "groupadd -g 1000513 domain_users 2>/dev/null ; export SHADOW_ALLOW_ALL_NUMERIC_USER=1 && useradd -d /home/${USER} -s /bin/bash -g domain_users -u ${rid} ${USER} 2>/dev/null || useradd -d /home/${USER} -s /bin/bash -g domain_users -u ${rid} --badnames ${USER} 2>/dev/null ; echo ${USER}:123456 | chpasswd 2>/dev/null ; echo '%domain_users ALL=(ALL) NOPASSWD: ${sudo_opr}' >> /etc/sudoers 2>/dev/null ; su - ${USER}"

这是一个docker run命令,用于在Docker容器中运行指定的映像并执行一系列操作。

解释上述代码:

docker run:运行Docker容器的命令。
-it:分配一个交互式的终端并将其连接到容器的标准输入、输出和错误输出。
–cpus d o c k e r c p u l i m i t :限制容器对处理器资源的使用,使用 {docker_cpu_limit}:限制容器对处理器资源的使用,使用 dockercpulimit:限制容器对处理器资源的使用,使用{docker_cpu_limit}变量来指定CPU限制。
-hhostname_${image##*/}:设置容器的主机名,它是当前主机名加上映像的名称(取映像路径中的最后一个部分)。
–dns 10.1.2.80:使用指定的DNS服务器来设置容器的DNS解析。
${docker_opt}:指定其他的Docker选项,这个变量可能包含其他的Docker参数。
a r g :指定其他的命令行参数,这个变量可能包含其他的命令行参数。 − v / h o m e / {arg}:指定其他的命令行参数,这个变量可能包含其他的命令行参数。 -v /home/ arg:指定其他的命令行参数,这个变量可能包含其他的命令行参数。v/home/{USER}:/home/ U S E R − v / h o m e / c o v e r i t y : / h o m e / c o v e r i t y : r o − v / h o m e / j e n k i n s : / h o m e / j e n k i n s : r o − v / s h a r e / {USER} -v /home/coverity:/home/coverity:ro -v /home/jenkins:/home/jenkins:ro -v /share/ USERv/home/coverity:/home/coverity:rov/home/jenkins:/home/jenkins:rov/share/{USER}:/share/ U S E R − v / b i n / x c p : / b i n / x c p : r o :将主机上的文件 / 目录挂载到容器内的相应路径,用于共享文件和目录。 {USER} -v /bin/xcp:/bin/xcp:ro:将主机上的文件/目录挂载到容器内的相应路径,用于共享文件和目录。 USERv/bin/xcp:/bin/xcp:ro:将主机上的文件/目录挂载到容器内的相应路径,用于共享文件和目录。{USER}是当前登录用户的用户名。
-w /home/ U S E R :设置容器的工作目录为 {USER}:设置容器的工作目录为 USER:设置容器的工作目录为{USER}用户的主目录。
–rm:容器退出后自动删除容器。
–name ${USER}_openssl rand -base64 8 | md5sum | cut -c1-8``:为容器指定一个唯一的名称,名称由当前用户的用户名加上随机生成的8位哈希字符串构成。
${image}:指定要运行的Docker映像。

/bin/bash -c groupadd -g 1000513 domain_users 2>/dev/null ; export SHADOW_ALLOW_ALL_NUMERIC_USER=1 && useradd -d /home/12345 -s /bin/bash -g domain_users -u 1206681 12345 2>/dev/null || useradd -d /home/12345 -s /bin/bash -g domain_users -u 1206681 --badnames 12345 2>/dev/null ; echo 12345:123456 | chpasswd 2>/dev/null ; echo '%domain_users ALL=(ALL) NOPASSWD: /bin/xcp' >> /etc/sudoers 2>/dev/null ; su - 12345

这段代码是一个shell命令,执行了一系列操作:

groupadd -g 1000513 domain_users 2>/dev/null: 创建一个用户组 domain_users,组ID为1000513。命令的输出错误信息被重定向到/dev/null,即被丢弃。

export SHADOW_ALLOW_ALL_NUMERIC_USER=1:设置环境变量SHADOW_ALLOW_ALL_NUMERIC_USER为1。该变量是用来允许使用纯数字作为用户名。

useradd -d /home/12345 -s /bin/bash -g domain_users -u 1206681 12345 2>/dev/null || useradd -d /home/12345 -s /bin/bash -g domain_users -u 1206681 --badnames 12345 2>/dev/null:尝试创建用户12345,其主目录为/home/12345,登录shell为/bin/bash,所属用户组为domain_users,用户ID为1206681。如果该用户名已存在,会尝试使用–badnames标志重新创建用户。命令的输出错误信息同样被重定向到/dev/null。

echo 12345:123456 | chpasswd 2>/dev/null:将用户12345的密码设置为123456。命令的输出错误信息被重定向到/dev/null。

echo ‘%domain_users ALL=(ALL) NOPASSWD: /bin/xcp’ >> /etc/sudoers 2>/dev/null:将%domain_users ALL=(ALL) NOPASSWD: /bin/xcp这一行内容追加到/etc/sudoers文件中,允许组domain_users的用户在执行/bin/xcp命令时不需要密码验证。命令的输出错误信息被重定向到/dev/null。

su - 12345:切换到用户12345并启动一个交互式的shell会话。

整段代码实际上是在进行一系列操作,其中包括创建用户组、创建用户、设置密码、授权sudo权限,并最后切换到创建的用户账户。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值