没长正的技术专栏 勤动手、多思考

Docker常用命令

2018-10-01

阅读:


Docker命令

容器运用比较广泛,微服务、CI。

基础: docker version 、docker info 、docker-compose version …

Docker中文

一、服务案例

1.启动实例

	#创建并启动nginxTest实例,并在nginx运行
	
    docker run -d -p 8090:80 --name nginxTest nginx

2.移除服务

	#移除服务
	
	docker rm -f nginxTest

3.停止服务

	#停止服务
	
	docker stop nginxTest

4.启动/重启服务

	
	docker start nginxTest
	docker restart nginxTest

5.查看正在运行的服务

	#查看正在运行的服务
	     
	 docker ps

	#查看所有的服务
	docker ps -a

二、镜像案例

1.获取本地镜像

   	#获取本地镜像
   	    
   	docker images

2.查询镜像信息

   	    
   	docker search xx

3.移除镜像

   	#移除镜像
   	
   	命令:docker rmi  imagename/image ID

   	强制移除: docker rmi -f imagename/image ID

4.创建镜像

   	#创建自己的镜像 --->通过Dockerfile 生成镜像 (进入Dockerfile目录)
   	
   	docker build -t xxx(仓库地址) .

5.获取信息的Image


  #如:centos  默认是最新的
   	
  docker pull centos

6.镜像迁移

内网环境如何打包迁移镜像文件

# 1.拉取指定版本文件预览服务

docker pull keking/kkfileview:4.1.0

# 2. 将镜像保存在本地

docker save -o kkfileview-4.1.0.tar 200d92888da0


#3. 将镜像通过fz 或者其他工具下载到windows本地桌面

#

# 4. 将文件上传到其他服务器
#

# 5. 将文件加载到镜像仓库中

docker load -i kkFileView-4.1.0.tar

# 6. 运行

docker run -it -p 8012:8012 keking/kkfileview:4.1.0

参考

三、容器内部操作

1.进入Docker实例

   	#进入Docker实例

   	@ @ 未创建镜像以前,则可使用: docker run -it 镜像 /bin/bash

   	@ @ 未创建镜像以前,则可使用: docker run -it 镜像 /bin/sh

   	xushijiandeiMac:~ xushijian$ docker exec -it 服务名称 /bin/bash
	root@d5a08d34f2db:/#  

	xushijiandeiMac:~ xushijian$ docker exec -it centos:latest
	[root@e94d4fd27cc7 /]# 

2.查看Docker容器信息

    #查看Docker容器信息
         
    docker inspect [containerName]

3.Docker -> 刷新配置(具体业务)

    #Docker -> 刷新配置
         
    #针对某一服务:
    docker exec -it strength_strength_1 curl -d "" "http://127.0.0.1:31002/refresh"


    #查看并调用内部服务:
    
    #1.先进入内部服务: internal 的服务中<返回值异常、请求方法名称(RequestMapping)、多检查几次>
    docker exec -it 服务名  bin/bash
    
    #2.再调用接口(具体参数细化集合,多个参数)
    如: curl -d "companyName=测试公司&companyId=100" "http://127.0.01:30301/internal//company/company/addMaterialCompany.json"       

4.Docker日志维护

    #Docker 日志维护(删除日志)
    docker inspect [containerName] | grep LogPath | cut -d ':' -f 2 | cut -d ',' -f 1 | xargs echo | xargs truncate -s 0
    
    #(1)如:(只能清除当前日志,如果包含多个日志文件,则其它文件不能删除)
 	docker inspect eureka_config_1 | grep LogPath | cut -d ':' -f 2 | cut -d ',' -f 1 | xargs echo | xargs truncate -s 0

    #(2)实时查看docker容器日志
    $ sudo docker logs -f -t --tail 行数 容器名
    
    #例:实时查看docker容器名为eureka_config_1的最后10行日志
    $ sudo docker logs -f -t --tail 10 eureka_config_1

5.shell脚本处理日志

    shell 脚本删除 docker 日志文件  (==将eureka_config_1  修改成其它的容器名==)

#!/bin/bash
        
# set your containers base path
containersPath=/var/lib/docker/containers
# get container id by container name 需要调整名称 2022-02-23
containerName=eureka_config_1

# clear current log file
docker inspect ${containerName} | grep LogPath | cut -d ':' -f 2 | cut -d ',' -f 1 | xargs echo | xargs truncate -s 0

#get containerId
containerId=`docker inspect -f '' ${containerName} 2> /dev/null`
if [ ! ${containerId} ];then
echo "container doesn't exist."
exit 2
fi

echo ${containerId}

#clear current log file
#cat /dev/null > ${containersPath}/${containerId}/${containerId}-json.log*

# delete old log file
rm -rf ${containersPath}/${containerId}/${containerId}-json.log.*
        
        
    备注:
    
        (1) 添加权限 chmod 777 clearDockerLog.sh
        (2) xargs 用法   https://www.cnblogs.com/wangqiguo/p/6464234.html 
        (3) cut 用法  http://blog.csdn.net/u011003120/article/details/52190187

四、Image 管理

通过部署Harbor搭建镜像的私有仓库,维护自己的镜像。(类比:maven 的仓库 nexus等)

image —> Dockerfile【推荐】

image —> container commit 生成新image 【不推荐,无image Layer生成过程】

# 以交互式方式运行官方基础镜像
# docker run -it vim-centos centos
# yum install vim
# vim-centos 启动时名称
docker commit my-centos vim-centos

五、container 管理

监控container工具: weavescope [也可container运行]

# 内存资源 100M, 共享CPU,10的配比 ,如果是20 ,则为 10 的两倍
docker run -d --name my-tomcat --mermory 100M --cpu-shares 10 -p 8080:8080 tomcat

# 查看内存、CPU使用
docker stat my-tomcat

六、 网络

  • network
  • namespace (创建自己的空间)
  • veth-pair 技术(成对出现、网络互通)

2021-08-23_Docker网络

  • iptables 技术

    1. 单机网络容器

# 查看网路方式 (bridge、host、null)
docker network ls

# 查看网络 桥接方式及网段
docker network inspect bridge 

# 创建自己的网络,并查看网段 docker network inspect tomcat-net
docker network create tomcat-net

# 启动容器,指定网络。 可查看IP,在tomcat-net ip 网段中。
docker run -d tomcat-net01 --network tomcat-net

# 查看网段或网络命令
docker exec -it tomcat-net01 ip a

如何让docker0中的服务能连接自定义网端的服务呢?(不同namespace空间,通过network(bridge)方式连接起来)

  1. bridge 桥接网络方式
  2. link 线上很少用
# 将tomcat01 加入 tomcat-net 自定义的网络中,自动添加域名解析
docker network connect tomcat-net tomcat01

2021-08-23_Docker跨网段桥接

自定义网络好处?

  1. 解决ip问题变化问题(每次重新运行容器)

  2. 可以使用网络名访问

# mysql集群实战
docker run -d --name mysql01 --network my-network msyql
docker run -d --name mysql02 --network my-network msyql
docker run -d --name mysql03 --network my-network msyql

# 可以通过网络名访问  my-netwrok:3306/dbName 访问
ping my-network
  1. 多级网络通信

    2.1 多级网络通讯技术

    overlay -> vxlan (主机之间不能使用相同的ip)

2021-08-23_Docker多机网络通信

七、持久化

  1. 数据持久化

    1. 创建卷名称 docker volume create –name v1 mysql1 v2 mysql2 v3 mysql3
    2. 采用 -v 挂载方式,将数据保存在本地,避免数据丢失。

八、容器编排

同一个编排中包含多个容器启动配置

单机编排: docker-compose.yml —>启动: docker-compose up 关闭: docker-compose down

多机编排:docker-swarm、mesos、k8s

docker-swarm 基于 docker stack 多机编排

docker stack deploy -c xx.yml my-service

Ingress : 转发到可利用的服务中

Internal技术:负载均衡

参考文档

docker文档

菜鸟教程-docker

docker mysql

[一文搞懂 Linux network namespace](https://www.cnblogs.com/bakari/p/10443484.html)


欢迎拍砖,多多交流,转载请注明出处:[没长正的技术专栏](http://blog.meizhangzheng.com) 如涉及侵权问题,请发送邮件到xsj34567@163.com,如情况属实本人将会尽快删除。


上一篇 Docker 实战

下一篇 Docker Kafka

Comments

Content