docker常用命令操作及案例容器创建

注:之前的工作中使用过一段时间docker,最近项目需要使用k8s+docker做dockers管理,顺便带个小MM。好记性不如烂笔头,整理点文档出来,欢迎诸位大牛指点。目标:整理出docker基础入门,docker  kubernetes 集群基础,spark on kubernetes的基础等几篇文档。持续更新ing~

1.搜索容器&run一个容器

1.搜索容器
docker search redis
2.后台run某个容器
docker run -d  redis
3.指定镜像版本
docker run -d redis:3.1
4.列出刚刚创建的容器或列出所有容器
docker ps   /docker ps -a
5.查看单个容器信息
docker inspect <container-id|container-name>
6.查看容器logs
docker logs <container-id|container-name>

2.创建一个容器指定端口以及挂载卷

2.1简单粗暴的几个常用参数
    docker run -d 后台运行   --name  指定容器名称   -p 指定映射端口  -v  指定本地存储路径   镜像名称
    docker run -d --name redisMapped -p 6379:6379 -v /opt/docker/data/redis:/data redis

    Tip:默认情况下,主机端口映射为0.0.0.0,即所有IP地址。
    您可以在定义端口映射时指定特定的IP地址例如-p 127.0.0.1:6379:6379
2.2 简单介绍一下上面两个概念点
2.2.1 端口映射
    在启动容器时,如果不配置宿主机器与虚拟机的端口映射,外部程序是无法访问虚拟机的,因为没有端口。
    docker run -p ip:hostPort:containerPort redis
    常用方式:
    127.0.0.1:3306:3306,映射本机的3306端口到虚拟机的3306端口
    127.0.0.1::3306,映射本机的3306端口到虚拟机的3306端口
    3306:3306,映射本机的3306端口到虚拟机的3306端口(最常用)

2.2.2文件挂载
    挂载主机目录/opt/docker/data/redis 容器本地目录 /software容器目录,在创建前容器是没有software目录的,docker 容器会自己创建

2.2.3 操作容器
     docker exec -it redis bash
    通过主机命令行进入master容器,意思就是进入容器中运行redis 的bash环境。
    不准确的来说理解成一个独立的linux环境即可。

举个例子安装mongodb3.4
1.docker search mongo 
    然后看中了这个镜像docker.io/centos/mongodb-36-centos7 
2.下载镜像
    docker pull docker.io/centos/mongodb-36-centos7
3.安装并运行此镜像,命名mongo34
 docker run -d -e MONGODB_USER='testuser' -e MONGODB_PASSWORD='testpass' -e MONGODB_DATABASE='test' -e MONGODB_ADMIN_PASSWORD='testpass'  --name mongo34 -p 27017:27017 -v /data/mongo:/data  docker.io/centos/mongodb-36-centos7
4.进入bash
 docker exec -it mongo34 bash

 

 

 

3.来一些docker常用命令备忘

    3.1 docker run  参数

docker run  参数
  -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不能被代理

3.2 docker 容器操作

docker build -t friendlyname .  # 使用当前目录下的内容创建Dockerfile镜像文件
docker run -p 4000:80 friendlyname  # 运行名为“friendlyname”的镜像,并设置端口映射
docker run -d -p 4000:80 friendlyname         # 后台运行容器
docker container ls                                # 查看运行中的容器
docker container ls -a             # 查看所有的容器,包括为运行的
docker container stop <hash>           # 优雅的停止容器进程
docker container kill <hash>         # 张志停止容器进程
docker container rm <hash>        # 从当前机器移除指定容器
docker container rm $(docker container ls -a -q)         # 移除所有容器
docker image ls -a                             # 查看当前机器上的所有镜像
docker image rm <image id>            # 从当前机器上移除指定镜像
docker image rm $(docker image ls -a -q)   # 从机器上移除所有容器
docker login             # 使用docker用户名密码登录CLI
docker tag <image> username/repository:tag  # 给镜像打标签
docker push username/repository:tag            # 上传镜像到笔者个人仓库
docker run username/repository:tag                   # 运行指定镜像的指定版本

 

3.3 docker服务操作

docker stack ls                                            # 列出应用程序
docker stack deploy -c <composefile> <appname>  # 运行制动的composefile
docker service ls                 # 列出与应用关联的正在运行的服务
docker service ps <service>                  # 列出与应用程序关联的任务
docker inspect <task or container>                   # 检查任务或容器状态
docker container ls -q                                      # 列出容器ID
docker stack rm <appname>                             # 删除一个应用程序
docker swarm leave --force      # 用swam管理下掉集群的一个节点

3.4 swarms操作

Swarms操作
docker-machine create --driver virtualbox myvm1 # 在(Mac, Win7, Linux)创建一个VM
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1 # Win10
docker-machine env myvm1                # 查看有关节点的基本信息
docker-machine ssh myvm1 "docker node ls"         # 列出swarm群中的节点
docker-machine ssh myvm1 "docker node inspect <node ID>"        # 检查节点
docker-machine ssh myvm1 "docker swarm join-token -q worker"   # 查看连接令牌
docker-machine ssh myvm1   # 与VM打开一个SSH会话;键入“exit”结束
docker node ls                # 查看swarm中的节点(登录到管理器时)
docker-machine ssh myvm2 "docker swarm leave"  # 使worker脱离swarm
docker-machine ssh myvm1 "docker swarm leave -f" # 使master脱离swarm并杀掉swarm
docker-machine ls # 列出虚拟机,星号显示这个shell正在与哪个虚拟机通话
docker-machine start myvm1            # 启动一个当前没有运行的虚拟机
docker-machine env myvm1      # 显示myvm1的环境变量和命令
eval $(docker-machine env myvm1)         # Mac命令将shell连接到myvm1
& "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env myvm1 | Invoke-Expression   # Windows命令将shell连接到myvm1
docker stack deploy -c <file> <app>  # 部署一个应用程序;命令shell必须设置为与管理器(myvm1)通信,使用本地Compose文件
docker-machine scp docker-compose.yml myvm1:~ # 将文件复制到节点的主目录(只有在使用ssh连接到管理器并部署应用程序时才需要
docker-machine ssh myvm1 "docker stack deploy -c <file> <app>"   # 使用ssh部署应用程序(您必须首先将撰写文件复制到myvm1)
eval $(docker-machine env -u)     # 断开与虚拟机的shell,使用本地docker
docker-machine stop $(docker-machine ls -q)               # 停止所有运行的VM
docker-machine rm $(docker-machine ls -q) # 删除所有虚拟机及其磁盘映像

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐