侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Docker日常使用及问题

2023-11-30 星期四 / 0 评论 / 0 点赞 / 61 阅读 / 7205 字

docker安装# Docker requires a 64-bit installation regardless of your CentOS version. Also, your kernel

docker安装

# Docker requires a 64-bit installation regardless of your CentOS version. Also, your kernel must be 3.10 at minimum, which CentOS 7 runs.# Centos 6安装docker 链接:“www.centoscn.com/image-text/install/2014/1128/4202.html”sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'[dockerrepo]name=Docker Repositorybaseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/enabled=1gpgcheck=1gpgkey=https://yum.dockerproject.org/gpgEOFyum install docker-engineservice docker start

docker使用

# 搜索查看可以使用的镜像docker search centos# 拉取需要的镜像docker pull centos:latest# 查看本地镜像列表docker images# 查看网络状态docker network ls# 查看容器信息docker inspect webhack# 拷贝一个现存容器中的文件到本地docker cp aaa39fe1e7af:/etc/redis.conf ./# 查看一个容器的运行日志docker logs -f 容器名orID# 查看一个容器的root密码, 因为Docker容器启动时的root用户的密码是随机分配的。所以,通过这种方式就可以得到redmine容器的root用户的密码了。(没测试成功)docker logs <容器名orID> 2>&1 | grep '^User: ' | tail -n1# 批量删除构建失败的容器# 先停止容器运行再删除,否则会挂掉...docker ps -a  | awk '{print $1}' | xargs docker stopdocker ps -a  | awk '{print $1}' | xargs docker rm# 然后删除无用的镜像文件docker rmi image_id# 存出构建好的镜像文件docker save -o honey.tar honey:v1# 载入现有镜像到dockerdocker load --input honey.tardocker < honey.tar.gz# 导出容器docker export id > honey.tar# 导入容器cat honey.tar | docker import - honey:latest# 启动一个容器的bash终端docker run -a stdin -a stdout -t centos:6.6 /bin/bash# 基于centos7的容器没有/bin/bash命令。。。。很乱# 基于Dockerfile构建一个镜像文件docker build -t honey:v1 .# 挂载本地文件或目录到容器中,容器中对文件的修改和宿主机中对文件的修改都会同步到容器和宿主机中,最好的方式是挂载映射目录,因为编辑文件时可能会造成文件 inode 的改变,从 Docker 1.1 .0起,这会导致报错误信息。# 参见:https://yeasy.gitbooks.io/docker_practice/content/data_management/volume.html# 挂载文件时,可能会出现本地文件权限是root或者是权限比较大的文件目录,而挂载到容器中后,容器中的低权限或其他用户将无法对文件目录进行修改,解决方法是将本地的文件目录设置为777权限docker run --net=host -v /home/docker/snmp/conf/supervisord.conf:/etc/supervisord.conf -v /home/docker/snmp/log:/home/log -it snmp:v3 supervisord# 把容器放到后台运行并打印出容器的iddocker run -d# 退出容器后即删除容器,不能与-d共用docker run --rm -it 容器ID# 提交修改后的容器为新的镜像docker commit 容器ID 镜像ID# Docker 挂载数据卷的默认权限是读写,用户也可以通过 :ro 指定为只读。docker run -d -P --name web -v /src/webapp:/opt/webapp:ro

docker export 和 docker save的区别

# export用于持久化容器(不是镜像),会丢失历史和元数据,无法回滚到以前的层docker ps -adocker export 容器ID > export.tar# 导入cat export.tar | docker import - export:v1# save用于持久化镜像(不是容器),有历史所有的操作,可以会滚docker save 镜像ID > image.tar# 导入docker load < image.tar

Dockerfile使用过程中的一些问题

# WORKDIR  指构建容器时容器内部的目录WORKDIR /home# COPY  复制本地文件到服务器的目录,无法复制操作容器内的文件COPY soft/jdk-7u79-linux-x64.rpm /home# RUN   运行服务器中的命令RUN rpm -ivh jdk-7u79-linux-x64.rpm# 切换目录WORKDIR redis-3.2.0WORKDIR src/# 此时的目录为/home/redis-3.2.0/srcRUN pwd# 容器内部的复制命令,无法操作本地文件RUN cp redis-cli /usr/bin# 默认调用的是sh -c apt-get install 某些情况下易出现问题CMD apt-get install# 所见即所得,按照自己想要的方式执行 调用exec fromCMD ["apt-get install"]# 指定容器运行时的用户名或UID,后续的RUN也会使用指定的用户执行命令# 虽然使用nobody权限的用户启动容器执行命令比较安全,但是对于yum这种则无法执行# 解决方法是使用supervisord启动执行的程序的时候指定启动的用户权限组进行执行启动USER nobody# 创建一个可以从本地或者其他容器挂载的挂载点,如果服务器不存在就自动创建# 和-v创建卷的区别https://segmentfault.com/q/1010000004107293VOLUME ["/data"]

CMD RUN的区别

CMD 容器启动时执行的命令,可被docker run中的命令重写覆盖,每个Dockerfile仅最后一条CMD指令生效RUN 容器构建时运行的命令ENTRYPOINT,表示镜像在初始化时需要执行的命令,不可被docker run中的命令重写覆盖,需谨记# ENTRYPOINT/CMD都只能在文件中存在一次,并且最后一个生效 多个存在,只有最后一个生效,其它无效!需要初始化运行多个命令,彼此之间可以使用 && 隔开,但最后一个须要为无限运行的命令,需切记!
# ENTRYPOINT/CMD,一般两者可以配合使用,比如:ENTRYPOINT ["/usr/sbin/sshd"]CMD ["-D"]# 在Docker daemon模式下,无论你是使用ENTRYPOINT,还是CMD,最后的命令,一定要是当前进程需要一直运行的,才能够防容器退出。# 以下无效方式:ENTRYPOINT service tomcat7 start #运行几秒钟之后,容器就会退出 CMD service tomcat7 start #运行几秒钟之后,容器就会退出# 这样有效:ENTRYPOINT service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out# 或者CMD service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out# 这样也有效:ENTRYPOINT ["/usr/sbin/sshd"] CMD ["-D"]

错误解决

# 报错“tar (child): Error is not recoverable: exiting now”这类错误的时候# 注意检查是否指定了WORKDIR

Docker相关资源

常用docker命令,及一些坑:http://blog.csdn.net/wsscy2004/article/details/25878363Docker使用Dockerfile构建镜像 :http://my.oschina.net/u/1861837/blog/649015Docker学习总结之Run命令介绍:http://www.cnblogs.com/vikings-blog/p/4238062.htmlDocker学习笔记之二,基于Dockerfile搭建JAVA Tomcat运行环境:http://www.blogjava.net/yongboy/archive/2013/12/16/407643.htmlDockerfile reference:https://docs.docker.com/engine/reference/builder/Docker — 从入门到实践(非常不错):https://yeasy.gitbooks.io/docker_practice/content/

后期更新问题

后期持续性的更新确实是个头疼的问题,不知道有没有类似github pages那种同步的功能会不会出现...

广告 广告

评论区