前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker 新手入门进阶详细篇

docker 新手入门进阶详细篇

作者头像
XRSec
发布2022-03-09 21:19:43
5540
发布2022-03-09 21:19:43
举报
文章被收录于专栏:XRSec.BlogXRSec.Blog

Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

废话不讲辣么多,干就完事

0x01 docker 换源

首先dokcer 官方仓库是搭建在国外的,所以我们需要 换源 *参考博客?** https://blog.csdn.net/doudou_mylove/article/details/105122843 获取专属 docker 加速地址 为啥要强行修改dns 呢?可能我只是想解析的更快点吧,男人不能不行,倒是必须得快?

代码语言:javascript
复制
sudo vim /etc/docker/daemon.json 
代码语言:javascript
复制
{
  "registry-mirrors": [
    "https://vipxxx.mirror.aliyuncs.com"
  ],
  "dns": [
    "223.5.5.5",
    "8.8.8.8"
  ]
}
代码语言:javascript
复制
sudo systemctl restart docker docker.service

Mac docker 可以在docker desktop 设置里面修改

0x02 docker 仓库 和 容器

docker 拉取(pull) 推送(push) 的是 容器(image)

代码语言:javascript
复制
docker pull nginx:latest
docker push nginx:latest

docker 运行(run) 完成后建立的叫 容器(Apps /Containers )

代码语言:javascript
复制
docker run nginx:latest

0x03 docker 新建容器

代码语言:javascript
复制
docker run -it \
    --name cs \
    -e "passwd=你的密码" \
    -e "server_ip=你的服务器IP地址,可以是内网地址,比如10.0.4.6" \
    -e "server_port=cs指定登陆端口" \
    -e "aliasname=Bing Wallpaper" \
    -e "dname=CN=www.microsoft.com, OU=Microsoft Corporation, O=Microsoft Corporation,
    L=Redmond, S=WA, C=US" \
    -p cs指定登陆端口:cs指定登陆端口 \
    -p 云函数专用,可以是任意端口,后面443不可改变:443 \
    -p 随意端口号:随意端口号 \
    -p cs指定登陆端口:cs指定登陆端口/udp \
    -p 云函数专用,可以是任意端口,后面443不可改变:443/udp \
    -p 随意端口号:随意端口号/udp \
    xrsec/cobaltstrike:none

是不是看的一头雾水?别急 看这里

代码语言:javascript
复制
docker run -it \ # 为啥要加 ‘\’ ?方便多行输入
    --name cs \ # --name 指定容器名称
    -e "passwd=你的密码" \ # 设置容器需要的环境变量,有点麻烦,在容器内部 echo $passwd 输出的就是 你的密码
    -e "server_ip=你的服务器IP地址,可以是内网地址,比如10.0.4.6" \ # 容器内部 echo $server_ip 输出的就是你设置的IP地址
    -e "server_port=cs指定登陆端口" \ # 以下忽略
    -e "aliasname=Bing Wallpaper" \
    -e "dname=CN=www.microsoft.com, OU=Microsoft Corporation, O=Microsoft Corporation,
    L=Redmond, S=WA, C=US" \
    -p cs指定登陆端口:cs指定登陆端口 \ # -p是把外部主机的端口(前面) 映射到 容器内部的端口(后面)
    -p 云函数专用,可以是任意端口,后面443不可改变:443 \
    -p 随意端口号:随意端口号 \
    -p cs指定登陆端口:cs指定登陆端口/udp \
    -p 云函数专用,可以是任意端口,后面443不可改变:443/udp \
    -p 随意端口号:随意端口号/udp \
    xrsec/cobaltstrike:none

如果你们希望容器自动重启,可以设置 restart 参数

重启函数

Docker容器的重启策略如下: no,默认策略,在容器退出时不重启容器 on-failure,在容器非正常退出时(退出状态非0),才会重启容器 on-failure:3,在容器非正常退出时重启容器,最多重启3次 always,在容器退出时总是重启容器 unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

代码语言:javascript
复制
docker run -it --name test --restart=always nginx:latest # 总是重启
docker run -it --name test --restart=on-failure:3 nginx:latest # 最多重启三次
docker container update --restart=always 容器名字 # 让不能自动重启的 容器升级 成为 自动重启的 容器
docker inspect -f "{{ .RestartCount }}" 容器名字 # 查看容器重启次数
docker inspect -f "{{ .State.StartedAt }}" 容器名字 #查看容器最后一次的启动时间

新建讲完了,那我们讲一下基础维护吧

维护容器

代码语言:javascript
复制
docker images 				# 查看本机Docker中存在哪些镜像
docker search images 	# 搜索images
docker pull images 		# 拉取 images
docker ps 						# 列出当前所有正在运行的容器
docker ps -a 					# 列出所有的容器
docker inspect $CONTAINER_ID(容器的ID,可以通过docker ps 查看) # 查看容器的相关信息
docker rm 容器名称 			# 删除容器
docker restart 容器名称 # 重启容器
docker stop 容器名称 		# 停止容器
docker start 容器名称 	# 启动容器
docker logs 容器名称 		# 查看容器日志报错
docker image prune -af # 删除多余镜像

掌握了这些你们就是大佬了,再学下去我就要要饭了?

?就拿这个考验老干部?

番外篇 新建镜像

讲的比较简单

代码语言:javascript
复制
FROM ubuntu:18.04 #
LABEL maintainer="xrsec" #
LABEL mail="troy@zygd.site" # 设置容器信息

RUN mkdir /awvs # 代表 新建镜像 的时候需要让 构建镜像 时的 开发工程师 创建一个文件夹 到 新建的镜像里面
COPY awvs.sh /awvs # 代表 新建镜像 的时候需要让 构建镜像 时的 开发工程师 复制awvs.sh 到 新建的镜像 新建的 awvs 文件夹里面
COPY Dockerfile /awvs # 代表 新建镜像 的时候需要让 构建镜像 时的 开发工程师 复制Dockerfile 到 新建的镜像 新建的 awvs 文件夹里面
COPY xaa /awvs #
COPY xab /awvs #
COPY xac /awvs #
COPY xad /awvs #
COPY xae /awvs #
COPY xaf /awvs #
COPY awvs_listen.zip /awvs # 以上类似

# init
# RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak \
#     && sed -i "s/archive.ubuntu/mirrors.aliyun/g" /etc/apt/sources.list \
#     && sed -i "s/security.ubuntu/mirrors.aliyun/g" /etc/apt/sources.list \
#     && apt update -y \ # 这里是害怕你们因为网络的问题下载不了软件
RUN apt update -y \
    && apt upgrade -y \
    && apt-get install wget libxdamage1 libgtk-3-0 libasound2 libnss3 libxss1 libx11-xcb-dev sudo libgbm-dev curl ncurses-bin unzip -y # 代表 新建镜像 的时候需要让 构建镜像 时的 开发工程师 运行这样一段安装软件的命令 把软件安装到 新建的镜像里面
    # && apt-get install wget libxdamage1 libgtk-3-0 libasound2 libnss3 libxss1 libx11-xcb-dev sudo libgbm-dev curl ncurses-bin unzip -y \
    # && mv /etc/apt/sources.list.bak /etc/apt/sources.list # 

# init_install
RUN cat /awvs/xaa /awvs/xab /awvs/xac /awvs/xad /awvs/xae /awvs/xaf > /awvs/awvs_x86.sh \ # 代表 新建镜像 的时候需要让 构建镜像 时的 开发工程师 运行这样一段合并文件的命令 把文件合并到 新建的镜像的新建的 awvs 文件夹里面 并保存为 awvs_x86.sh
    && chmod 777 /awvs/awvs_x86.sh \ # 代表 新建镜像 的时候需要让 构建镜像 时的 开发工程师 运行这样一段改变文件权限的命令 怕新建的镜像运行新的容器的时候 运行不了这个脚本文件
    && sed -i "s/read -r dummy/#read -r dummy/g" /awvs/awvs_x86.sh \ # 替换awvs_x86.sh 里面的一些内容
    && sed -i "s/pager=\"more\"/pager=\"cat\"/g" /awvs/awvs_x86.sh \ #
    && sed -i "s/read -r ans/ans=yes/g" /awvs/awvs_x86.sh \ #
    && sed -i "s/read -p \"    Hostname \[\$host_name\]:\" hn/hn=awvs/g" /awvs/awvs_x86.sh \ #
    && sed -i "s/host_name=\$(hostname)/host_name=awvs/g" /awvs/awvs_x86.sh \ #
    && sed -i "s/read -p \"    Hostname \[\$host_name\]:\" hn/awvs/g" /awvs/awvs_x86.sh \ #
    && sed -i "s/read -p '    Email: ' master_user/master_user=awvs@awvs.com/g" /awvs/awvs_x86.sh \ #
    && sed -i "s/read -sp '    Password: ' master_password/master_password=Awvs@awvs.com/g" /awvs/awvs_x86.sh \ #
    && sed -i "s/read -sp '    Password again: ' master_password2/master_password2=Awvs@awvs.com/g" /awvs/awvs_x86.sh \ #
    && sed -i "s/systemctl/\# systemctl/g"  /awvs/awvs_x86.sh \ #
    && /bin/bash /awvs/awvs_x86.sh # 初始化一下配置文件,因为awvs 不运行的话不生成文件之后激活无法进行

# init_listen
RUN chmod 777 /awvs/awvs.sh \ #
    && unzip -d /awvs/awvs_listen /awvs/awvs_listen.zip \ #
    && chmod 444 /awvs/awvs_listen/license_info.json \ #
    && cp /awvs/awvs_listen/wvsc /home/acunetix/.acunetix/v_210628104/scanner/ \ #
    && cp /awvs/awvs_listen/license_info.json /home/acunetix/.acunetix/data/license/ \ #
    && cp /awvs/awvs_listen/wa_data.dat /home/acunetix/.acunetix/data/license/ \ #
    && chown acunetix:acunetix /home/acunetix/.acunetix/data/license/wa_data.dat # 哗啦啦一套操作猛如虎

ENTRYPOINT [ "/awvs/awvs.sh"] # 设置镜像运行成为容器的时候开机要干的第一件事

EXPOSE 3443 告诉后面的兄弟记得开3443端口

# ENV TZ='Asia/Shanghai' # 设置时区以免时间问题
# ENV LANG 'zh_CN.UTF-8' # 设置中文以免乱码

STOPSIGNAL SIGQUIT # 我也不知道,嘤嘤嘤

CMD ["/awvs/awvs.sh"] # 设置镜像运行成为容器的时候开机要干的第一件事
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 docker 换源
  • 0x02 docker 仓库 和 容器
  • 0x03 docker 新建容器
    • 重启函数
      • 维护容器
      • 番外篇 新建镜像
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com