Docker基础搭建及常见问题解决

0x0一些废话

由于今年要参加第十二届全国大学生信息安全竞赛,在builder环节需要搭建docker环境部署题目以及提交最终的dockerfile。在此之前也没有系统的学习过相关知识,临时在网上查的资料,搭建过程中遇见了各种问题,所以记录下来方便以后的学习也希望能给遇到同样问题的同学提供参考。

0x1Docker安装

#安装环境

  软件:vmware

  系统:centos7

#安装过程

  使用Yum方法安装docker

  参考命令:yum install docker-ce  -y

  启动服务:systemctl start docker

0x2Docker拖取镜像创建容器

镜像

#拖取镜像

  参考命令:docker pull centos:6          //centos:6为想安装的基础镜像名

#查看已有镜像

  参考命令:docker images

#删除镜像

  参考命令:docker rmi 镜像id

#查找相关镜像

  参考命令:docker search 镜像名

容器

#创建容器

  参考命令:docker run --name mydocker -p 8888:80 -it centos:6 /bin/bash       

  参数解释:--name 指定创建容器的名字

                    -p 端口映射

                    -i 参数用设置容器中的STDIN是开启的

                    -t 参数表示为创建的容器分配一个伪tty终端

                    /bin/bash 启动容器后启动bash

#删除容器

  参考命令:docker rm 容器名/容器id

#查询正在运行的容器

  参考命令:docker ps

#查看所有容器

  参考命令:docker ps -a

#进入容器

 参考命令:docker start(stop) 容器名         //启动容器

                   docker exec -it 容器名/容器id /bin/bash    //进入交互界面

#提交自定义镜像

  可以将自己搭建好的容器制作成镜像方便日后使用

  参考命令:docker commit 容器名 image名

 

0x3写Dockerfile过程中遇到的问题及解决方法

dockerfile的创建及使用

#dockerfile基本语法

  参考这篇博客:

  https://www.cnblogs.com/panwenbin-logs/p/8007348.html

 

#使用方法

  需要进入dockerfile目录下,dockerfile的文件名必须为Dockerfile然后执行命令:
  参考命令:docker build -t centos:vv6 .    //不要忘了最后面有一个点,他表示执行当前目录下Dockerfile

遇到的问题

#遇到的第一个问题就是使用COPY 复制的文件没有成功

  解决方法:原因是该文件已经存在,此命令无法实现覆盖,需要先删除该文件在执行COPY语句,例如下图

                   

#第二个问题就是使用CMD执行.sh文件失败

  解决办法:原因是我使用docker run --name centostest -p 8888:80 -it centos:6 /bin/bash该命令创建容器时指定了shell,即/bin.bash,他会覆盖掉CMD,导致无法执行。我们使用后台运行的方法创建容器即可解决,docker run --name                        centostest -p 8888:80 -dit centos:6

#第三个问题是编写的.sh不规范导致达不到想要的效果,我这里是创建数据库及添加数据失败

  解决方法:利用EOF来执行多行命令,例子如下

                    mysql -uroot -p'123456' << EOF

                    create database test;

                    use test; 

                    create table flag(id int(10) primary key,username char(20),password char(20));

                    insert into flag values(1,'admin','iamprettygirl');

                    grant select on flag.flag to 'ciscn'@'localhost';

                    EOF

#第四个问题是当写好.sh和dockfile后也能buil成功,但是在创建容器时发现容器创建完成后就关闭了,

   再也启动不起来了,这可不行,我还指望他提供服务呢

  解决方法:原因是当用docker run创建容器后,执行完CMD命令后容器就觉得无事可做,所以他就自杀了。

                    即我们用-d参数让所有的命令在后台完成后容器就自动关闭了,解决此问题有两个思路:

                    一是给他添加一个while循环让他一直执行某条命令;

                    二 是把他的某些服务挂到前台,我使用的是第一种方法在.sh文件最后加上一天循环命令,

                   见下图:

                   

--------------------------------------------------------------------------------------------------------------------------

PS:虽然一波三折,但是最后还是顺利的完成了题目的设计,期望此次比赛能取得一个好成绩  ^-^

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值