设为首页 收藏本站
查看: 744|回复: 0

[经验分享] docker安装及高级应用

[复制链接]

尚未签到

发表于 2018-5-27 09:58:08 | 显示全部楼层 |阅读模式
一:docker基础讲解
1、环境搭建
网络YUM源
  /var/lib/dockerdocker目录
  /var/lib/docker/containers容器目录
  yum -y install docker
  service docker start;chkconfig docker on
2、基础命令
  docker version基本信息查看
  docker info 查看系统(docker)层面信息,包括管理的images, containers数等
  docker searchxxx搜索镜像
docker pullxxxx下载镜像(chug/ubuntu12.10x64)
Docker push  XXXX上传镜像
3、查看镜像
    docker images: 列出images
    docker images -a :列出所有的images(包含历史)
    docker images --tree :显示镜像的所有层(layer)
    docker rmi  <image ID>: 删除一个或多个image
4、使用镜像创建容器
docker run --name  wang chug/ubuntu12.10x64  
--name容器命名(不用默认)
docker run --name daemon_dave -d  httpd /bin/sh -c "while true;do echo hello world; sleep 1; done"
-d放入后台,循环打印hello  world
交互式运行
docker run -i -t chug/ubuntu12.10x64  /bin/bash

5、再次启动容器
docker start/stop/restart <container> 开启/停止/重启container
docker start [container_id] :
docker attach [container_id] 进入运行容器实例(有时不行)
docker exec -it ID /bin/bash进入运行的docker后台
docker start -i <container> 启动一个container并进入交互模式(相当于先start,在attach)
6、端口映射
docker指令:docker run -p ip:hostPort:containerPort redis
使用-p参数会分配宿主机的端口映射到虚拟机。
IP表示主机的IP地址。
hostPort表示宿主机的端口。
containerPort表示虚拟机的端口。

7、删除容器
docker rmXXXXX
docker rm `docker ps -a -q` :删除所有的container
docker ps -a -q | xargs docker rm :同上, 删除所有的containe
8、生成新的镜像
方法一:
docker commit <container-id> <image-name>命令可以把一个正在运行的容器变成一个新的镜像。    用户名/容器名
docker commit -m="新创建镜像的提交信息" --author="创建的作者信息"  ID 用户名/仓库名:webserver标签名
方法二:
mkdir /static_web    &&  cd !$  && touch Dockerfile
cat Dockerfile
FROM centos#原镜像
MAINTAINER MR wang "wang049718@163.com"#作者,联系方式
RUN mkdir /wang#运行的命令(shell形式)
RUN echo 1234 > /wang/ab.txt
RUN [ "mkdir","/xiang" ]#运行的命令(exec形式)
EXPOSE 80#开放的端口

CMD [ “/common” ]#执行的脚本
ENV   name 2014-07-07#环境变量(可选)
docker build -t='wang/static_web:v1' .#构建镜像wang仓库名,sta...镜像名,v1标签名
docker build   --no-cache -t='wang/static_web:v1' . --no-cache确保构建过程不使用缓存(相当于重新构建)
9、持久化容器与镜像(写入文件)
export命令用于持久化容器
docker export <CONTAINER ID> > /tmp/export.tar
持久化镜像
Save命令用于持久化镜像
docker save 镜像ID > /tmp/save.tar
10、恢复(导入)
cat /tmp/export.tar | docker import - export:latest容器
docker load < /tmp/save.tar镜像
11、镜像打标签
docker tag daa11948e23d load:tag
export-import与save-load的区别
    导出后再导入(export-import)的镜像会丢失所有的历史,而保存后再加载(save-load)的镜像没有丢失历史和层(layer)。这意味着使用导出后再导入的方式,你将无法回滚到之前的层(layer),同时,使用保存后再加载的方式持久化整个镜像,就可以做到层回滚。(可以执行docker tag <LAYER ID> <IMAGE NAME>来回滚之前的层)。
  
二:拓展
1、上传文件到容器
# docker cp   /home/vim_7.3.429-2ubuntu2_amd64.deb     cae3b75b7ede:/home
2、查看容器信息
docker ps :列出当前所有正在运行的container
   docker ps -l :列出最近一次启动的container
   docker ps -a :列出所有的container(包含历史,即运行过的container)
   docker ps -q :列出最近一次运行的container ID
docker ps -n  x 显示最后x个容器
docker inspect wang查看更多容器信息
docker inspect --format='` `.`HostConfig`.`LogConfig`.`Type`' wang
--format 以什么格式查找.key键
docker inspect --format '` `.`HostConfig`.`LogConfig`.`Type`' wang
多个容器查询
docker inspect --format  '` `.`HostConfig`'
'` `.`HostConfig`.`LogConfig`.`Type`'wang  xiang

3、查看容器进程后端日志
docker logs -ft  daemon_dave-f(与tail -f一样)-t加时间daemon_dave容器标识符

docker logs --tail 10  daemon_dave最后10行


4、查看容器内进程
docker top daemon_dave
5、执行容器内命令(非交互)
docker exec  daemon_dave  ls /daemon_dave容器标识符
6、自动重启容器
docker run --restart=always --name daemon_dave -d  httpd /bin/sh -c "while true;do echo hello world; sleep 1; done"always无论退出代码是啥都重启

docker run --restart=on-failure:2  --name daemon_dave -d  httpd /bin/sh -c "while true;do echo hello world; sleep 1; done"只有退出代码非0,重启,最多2次
7、查看镜像构造过程
docker history bb896b831086
8、查看宿主机的映射端口
docker  ps       80/tcp, 0.0.0.0:32768->88/tcp
docker port b5d07ee6af90  880.0.0.0:32768
docker port redis6379/tcp -> 0.0.0.0:32770
9、不能再docker内执行systemctl解决
docker run -d -p 80  -e "container=docker"  --privileged=true -v /wang/xiao/:/var/www/html --name web wang/xiang /usr/sbin/init       启动
-v物理挂在到docker内
docker exec -it ID /bin/bash进入运行的docker后台
执行命令





三:项目实验
1、docker部署静态HTML网页
cat Dockerfile
FROM  docker.io/wellsie/centos7#源镜像
MAINTAINER MR wang "wang049718@163.com"#作者,联系方式
ENV REFRESHED_AT 2017-07-05#定义一个时间(变量形式)
RUN yum -y install httpd#装包
RUN mkdir /var/www/html -p#建目录
RUN mkdir /etc/httpd/conf -p
ADD httpd.conf  /etc/httpd/conf/#增加文件到docker
RUN systemctl enable httpd#启动服务
EXPOSE 80#docker服务接口启动80端口

docker build --no-cache -t='ssssssss/xxxxxxxx' .#建造镜像

docker run -d -p 80  --restart=always -e "container=docker"  --privileged=true -v /wang/xiao/:/var/www/html --name web  ssssssss/xxxxxxxx  /usr/sbin/init
#启动服务(-v挂载本地到docker)
docker exec -it ID  /bin/bash#进入容器

2、docker构建redis
Ubuntu确定源没问题
cat Dockerfile
FROM  wan/ubuntu
MAINTAINER MR wang "wang049718@163.com"
ENV REFRESHED_AT 2017-07-05
RUN apt-get update
RUN apt-get -y install redis-server redis-tools
EXPOSE 6379
ENTRYPOINT ["/usr/bin/redis-server"]开启服务
CMD []

docker build  -t ubuntu/redis:v1 .
docker run -d -p 6379 --name redis ubuntu/redis:v1
docker port  redis
./redis-cli  -p portceshi
3、docker容器互联(共享多个)
docker run  -i -t     -d  ubuntu/redis:v1不开放端口
docker run -d -p 1234  -e "container=docker" --link redis:db  --privileged=true -v /wang/xiao/:/var/www/html --name webapppp  ssssssss/xxxxxxxx  /usr/sbin/init
链接redis,db别名

测试
[root@05c0aad0dbf0 cgi-bin]# vi pyth.py
#!/usr/bin/env python
#coding:utf-8
a=123
def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    #return "type(start_response)"
    a=RedisServer(host='172.17.0.2',port=6379)
    print a.error
    a.run()
    print a.error
    return "a %s" % a.error
from redis import Redis
class RedisServer(object):
        def __init__(self,host,port):
                self.redis=Redis(host=host,port=port)
                self.error='false'
        def run(self):
                self.redis.set('name','wa')
                if self.redis.get('name'):
                        self.error=True
        @property
        def response(self):
                return self.error
4、网卡桥接,docker内静态IP
centos7宿主机上建立Docker桥接物理网络过程
创建桥接网卡
文件br0建立桥接
使其docker使用br0
修改文件,使其docker接口为br0
~#:vim /etc/sysconfig/docker
#在OPTIONS='--selinux-enabled'这行中修改为OPTIONS='--selinux-enabled -b=br0'即让docker服务启动时使用br0网卡进行桥接
启动docker
service docker start
启动一个手动设置网络的容器
这里最好不要让docker自动获取ip,下次启动会有变化而且自动获取的ip可能会和物理网段中的ip冲突
1
~#:docker run -itd --net=none --name=test centos7 /bin/bash
下载pipework工具
git clone https://github.com/jpetazzo/pipework
cp ~/pipework/pipework /usr/local/bin/
为容器配置静态IP
pipework br0 test 192.168.184.11/24@192.168.184.2
四:备份
1、导入与导出
导出(导出容器快照到本地文件)
docker ps -a
docker export 7691a814370e > ubuntu.tar
导入(从容器快照文件中再导入为镜像)
cat ubuntu.tar |  docker import - test/ubuntu:v1.0

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-481672-1-1.html 上篇帖子: 如何使用 Weave 网络? 下篇帖子: gitlab+jenkins+maven+docker持续集成(七)——.Jenkins Pipeline持续集成
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表