index

docker命令

docker运行容器

docker run -it -v G:/docker/mysql/data:/var/lib/mysql -v G:/docker/mysql/config/my.cnf:/etc/mysql/my.cnf --restart=always --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql


docker run -it -v /var/lib/mysql:/var/lib/mysql -v /etc/mysql/my.cnf:/etc/mysql/my.cnf --restart=always --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:5.7


docker run -it -d -p 6379:6379 -v G:/docker/redis/config/redis.conf:/usr/local/etc/redis/redis.conf -v G:/docker/redis/data:/data --name docker-redis docker.io/redis redis-server /usr/local/etc/redis/redis.conf --appendonly yes

命令解释

-p 6379:6379 : 将容器的6379端口映射到主机的6379端口

-v $PWD/docker/redis/conf:/etc/redis/redis.conf: 将主机中当前目录下的redis.conf映射成redis的启动配置文件
-v $PWD /docker/redis/data:/data: 将主机中当前目录下 /docker/reids/data挂载到容器的/data
redis-server /etc/redis/redis.conf:指定配置文件启动redis-server进程

--requirepass "123456" :指定链接redis-server的密码
--appendonly yes:开启数据持久化
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]  

  -d, --detach=false         指定容器运行于前台还是后台,默认为false   
  -i, --interactive=false   打开STDIN,用于控制台交互  
  -t, --tty=false            分配tty设备,该可以支持终端登录,默认为false  
  -u, --user=""              指定容器的用户  
  -a, --attach=[]            标准输入输出流和错误信息(必须是以非docker run -d启动的容器)
  -w, --workdir=""           指定容器的工作目录 
  -c, --cpu-shares=0        设置容器CPU权重,在CPU共享场景使用  
  -e, --env=[]               指定环境变量,容器中可以使用该环境变量  
  -m, --memory=""            指定容器的内存上限  
  -P, --publish-all=false    指定容器暴露的端口  
  -p, --publish=[]           指定容器暴露的端口 
  -h, --hostname=""          指定容器的主机名  
  -v, --volume=[]            给容器挂载存储卷,挂载到容器的某个目录  
  --volumes-from=[]          给容器挂载其他容器上的卷,挂载到容器的某个目录
  --cap-add=[]               添加权限,权限清单详见:http://linux.die.net/man/7/capabilities  
  --cap-drop=[]              删除权限,权限清单详见:http://linux.die.net/man/7/capabilities  
  --cidfile=""               运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法  
  --cpuset=""                设置容器可以使用哪些CPU,此参数可以用来容器独占CPU  
  --device=[]                添加主机设备给容器,相当于设备直通  
  --dns=[]                   指定容器的dns服务器  
  --dns-search=[]            指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件  
  --entrypoint=""            覆盖image的入口点  
  --env-file=[]              指定环境变量文件,文件格式为每行一个环境变量  
  --expose=[]                指定容器暴露的端口,即修改镜像的暴露端口  
  --link=[]                  指定容器间的关联,使用其他容器的IP、env等信息  
  --lxc-conf=[]              指定容器的配置文件,只有在指定--exec-driver=lxc时使用  
  --name=""                  指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字  
  --net="bridge"             容器网络设置:
                                bridge 使用docker daemon指定的网桥     
                                host     //容器使用主机的网络  
                                container:NAME_or_ID  >//使用其他容器的网路,共享IP和PORT等网络资源  
                                none 容器使用自己的网络(类似--net=bridge),但是不进行配置 
  --privileged=false         指定容器是否为特权容器,特权容器拥有所有的capabilities  
  --restart="no"             指定容器停止后的重启策略:
                                no:容器退出时不重启  
                                on-failure:容器故障退出(返回值非零)时重启 
                                always:容器退出时总是重启  
  --rm=false                 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)  
  --sig-proxy=true           设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

docker补充命令

  • docker start 容器名(容器ID也可以)
  • docker stop 容器名(容器ID也可以)
  • docker run 命令加 -d 参数,docker 会将容器放到后台运行
  • docker ps 正在运行的容器
  • docker logs --tail 10 -tf 容器名 查看容器的日志文件,加-t是加上时间戳,f是跟踪某个容器的最新日志而不必读整个日志文件
  • docker top 容器名 查看容器内部运行的进程
  • docker exec -d 容器名 touch /etc/new_config_file 通过后台命令创建一个空文件
  • docker run --restart=always --name 容器名 -d ubuntu /bin/sh -c “while true;do echo hello world; sleep 1; done” 无论退出代码是什么,docker都会自动重启容器,可以设置 –restart=on-failure:5 自动重启的次数
  • docker inspect 容器名 对容器进行详细的检查,可以加 –format=’{(.State.Running)}’ 来获取指定的信息
  • docker rm 容器ID 删除容器,注,运行中的容器无法删除
  • docker rm $(docker ps -aq) 删除所有容器
  • docker rmi $(docker images -aq) 删除所有镜像
  • docker images 列出镜像
  • docker pull 镜像名:标签 拉镜像
  • docker search 查找docker Hub 上公共的可用镜像
  • docker build -t='AT/web_server:v1' 命令后面可以直接加上github仓库的要目录下存在的Dockerfile文件。 命令是编写Dockerfile 之后使用的。-t选项为新镜像设置了仓库和名称:标签
  • docker login 登陆到Docker Hub,个人认证信息将会保存到$HOME/.dockercfg,
  • docker commit -m="comment " --author="AT" 容器ID 镜像的用户名/仓库名:标签 不推荐这种方法,推荐dockerfile
  • docker history 镜像ID 深入探求镜像是如何构建出来的
  • docker port 镜像ID 端口 查看映射情况的容器的ID和容器的端口号,假设查询80端口对应的映射的端口
  • run 运行一个容器, -p 8080:80 将容器内的80端口映射到docker宿主机的某一特定端口,将容器的80端口绑定到宿主机的8080端口,另 127.0.0.1:80:80 是将容器的80端口绑定到宿主机这个IP的80端口上,-P 是将容器内的80端口对本地的宿主机公开
  • docker push 镜像名 将镜像推送到 Docker Hub
  • docker rmi 镜像名 删除镜像
  • docker attach 容器ID 进入容器
  • docker network create --subnet=172.171.0.0/16 docker-at 选取172.172.0.0网段
  • docker build 就可以加 -ip指定容器ip 172.171.0.10 了

docker 镜像操作

docker images:列出images

docker images -a:列出所有的images(包含历史)

docker images --tree :显示镜像的所有层(layer)

docker rmi  <image ID>:删除一个或多个image

docker 容器操作

#启动容器
docker start <ContainerId(或者name)>
#停止容器
docker stop <ContainerId(或者name)>
docker stop -t=60 容器ID或容器名
参数 -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态
#重启容器
docker restart <ContainerId(或者name)>
#删除容器
docker rm <ContainerId(或者name)>
docker rm -f 容器ID或容器名 :直接删除正在运行的容器
#删除所有容器
docker rm $(docker ps -a -q)
#进入容器
docker exec -it containerID /bin/bash
## 查看容器日志
docker logs -f -t --tail 行数 容器名

Dockerfile语法

  • MAINTAINER 标识镜像的作者和联系方式
  • EXPOSE 可以指定多个EXPOSE向外部公开多个端口,可以帮助多个容器链接
  • FROM 指令指定一个已经存在的镜像
  • \#号代表注释
  • RUN 运行命令,会在shell 里使用命令包装器 /bin/sh -c 来执行。如果是在一个不支持shell 的平台上运行或者不希望在shell 中运行,也可以 使用exec 格式 的RUN指令
  • ENV REFRESHED_AT 环境变量 这个环境亦是用来表明镜像模板最后的更新时间
  • VOLUME 容器添加卷。一个卷是可以 存在于一个或多个容器内的特定的目录,对卷的修改是立刻生效的,对卷的修改不会对更新镜像产品影响,例:VOLUME[“/opt/project”,”/data”]
  • ADD 将构建环境 下的文件 和目录复制到镜像 中。例 ADD nginx.conf /conf/nginx.conf 也可以是取url 的地址文件,如果是压缩包,ADD命令会自动解压、
  • USER 指定镜像用那个USER 去运行
  • COPY 是复制本地文件,而不会去做文件提取(解压包不会自动解压) 例:COPY conf.d/ /etc/apache2/ 将本地conf.d目录中的文件复制到/etc/apache2/目录中

docker-compose.yml 语法说明

version: '3' # 表示compose对docker版本的支持,这里是compose版本,并非是docker版本。
services: # 表示一个该配置文件的所有容器实例,支持配置多个容器实例。
  tomcat: # 表示是一个多个容器中的其中一个
    restart: always # 表示该容器实例是随着机器启动而启动。
    image: tomcat # 表示本容器使用的镜像是tomcat,如需要指定版本号则 image: tomcat:8.0。
    container_name: tomcat # 表示容器的一个别名
    ports: # 表示容器端口映射到宿主机端口。
      - 8080:8080
    volumes: # 表示dockers容器的数据卷,将容器实例的目录映射到宿主机上盘符目录。
      - d://docker/tomcat/webapps:/usr/local/tomcat/webapps
      - d://docker/tomcat/logs:/usr/local/tomcat/logs
    environment: # 表示容器环境的设置,我这里配置的是tomcat容器的时区时间为亚洲/上海。
      TZ: Asia/Shanghai
  • image 指定为镜像名称或镜像ID。如果镜像不存在,Compose将尝试从互联网拉取这个镜像
  • build 指定Dockerfile所在文件夹的路径。Compose将会利用他自动构建这个镜像,然后使用这个镜像
  • command 覆盖容器启动后默认执行的命令
  • links 链接到其他服务容器,使用服务名称(同时作为别名)或服务别名(SERVICE:ALIAS)都可以
  • external_links 链接到docker-compose.yml外部的容器,甚至并非是Compose管理的容器。参数格式和links类似
  • ports 暴露端口信息。宿主机器端口:容器端口(HOST:CONTAINER)格式或者仅仅指定容器的端口(宿主机器将会随机分配端口)都可以(注意:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 你可能会得到错误得结果,因为 YAML 将会解析 xx:yy 这种数字格式为 60 进制。所以建议采用字符串格式。)
  • expose 暴露端口,与posts不同的是expose只可以暴露端口而不能映射到主机,只供外部服务连接使用;仅可以指定内部端口为参数
  • volumes 设置卷挂载的路径。可以设置宿主机路径:容器路径(host:container)或加上访问模式(host:container:ro)ro就是readonly的意思,只读模式
  • volunes_from 挂载另一个服务或容器的所有数据卷
  • environment 设置环境变量。可以属于数组或字典两种格式。如果只给定变量的名称则会自动加载它在Compose主机上的值,可以用来防止泄露不必要的数据
  • env_file 从文件中获取环境变量,可以为单独的文件路径或列表。如果通过docker-compose -f FILE指定了模板文件,则env_file中路径会基于模板文件路径。如果有变量名称与environment指令冲突,则以后者为准(环境变量文件中每一行都必须有注释,支持#开头的注释行)
  • extends 基于已有的服务进行服务扩展。例如我们已经有了一个webapp服务,模板文件为common.yml。编写一个新的 development.yml 文件,使用 common.yml 中的 webapp 服务进行扩展。后者会自动继承common.yml中的webapp服务及相关的环境变量
  • net 设置网络模式。使用和docker client 的 –net 参数一样的值
  • pid 和宿主机系统共享进程命名空间,打开该选项的容器可以相互通过进程id来访问和操作
  • dns 配置DNS服务器。可以是一个值,也可以是一个列表
  • cap_add,cap_drop 添加或放弃容器的Linux能力(Capability)
  • dns_search 配置DNS搜索域。可以是一个值也可以是一个列表
  • 注意:使用compose对Docker容器进行编排管理时,需要编写docker-compose.yml文件,初次编写时,容易遇到一些比较低级的问题,导致执行docker-compose up时先解析yml文件的错误。比较常见的是yml对缩进的严格要求。yml文件还行后的缩进,不允许使用tab键字符,只能使用空格,而空格的数量也有要求,一般两个空格。

docker window 10 之 虚拟数据卷创建

主要是用于数据挂载在本地盘没有权限问题的解决 如 mongodb等

创建虚拟数据卷 test数据卷

docker volume create test

删除

docker volume rm test

查看

docker volume ls


参考:后端随笔记录

你要尽全力保护你的梦想。那些嘲笑你梦想的人,因为他们必定会失败,他们想把你变成和他们一样的人。 —《当幸福来敲门》



本文结束感谢您的阅读

闲言碎语   docker
本文作者:忆往昔
版权声明:本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!