docker常用命令操作及案例容器创建
docker常用命令操作及案例容器创建注:之前的工作中使用过一段时间docker,最近项目需要使用k8s+docker做dockers管理,顺便带个小MM。好记性不如烂笔头,整理点文档出来,欢迎诸位大牛指点。目标:整理出docker基础入门,docker kubernetes 集群基础,spark on kubernetes的基础等几篇文档。持续更新ing~1.搜索容器&run一
·
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) # 删除所有虚拟机及其磁盘映像
更多推荐
已为社区贡献2条内容
所有评论(0)