Module-Docker使用手册

  • Post author:
  • Post category:其他




LinuxDocker 使用手册



Docker 介绍



Docker 的应用场景 Web

  • 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。



Docker 的优点

  • 持续部署与测试

    • Docker 可以确保从开发到产品发布整个过程环境的一致性。便于部署和开发测试。
  • 多云平台

    • 可移植性
  • 环境标准化和版本控制

    • 可以方便的进行版本管理
  • 隔离性

  • 安全性

    1.优势

docker 启动快,开启一个 container 通常只需要几秒钟,而虚拟机开机至少几十秒;

docker 需要的资源更少, docker 在操作系统级别进行虚拟化, docker 容器和内核交互,几乎没有性能损耗,性能优于通过 Hypervisor 层与内核层的虚拟化;

docker 更轻量, docker 重装或者复制到其他机器比虚拟机快很多,重新安装 docker 容器只需要几十秒种,而虚拟机至少需要几分钟;并且 dockers 的 image 文件导出占用只有几百兆,但是虚拟机的镜像包往往有几个 G; 2.缺点

docker 无法对外开放所有端口,docker 只能对宿主机和同宿主机的 docker 开放所有端口,其他机器访问 dockers 需要通过宿主机进行端口转发,而不能像虚拟机一样通过 IP 访问;

docker 默认安装系统包较少,默认安装的虚拟机往往字段一些常用的系统包,但是 docker 很多常用的包都没有(比如 docker 下 centos7 默认是没有 ip 命令的,也不支持 ssh 登陆);



Docker 的主要用途

(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。

(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。

(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构


https://blog.csdn.net/u013007900/article/details/62219169



https://blog.csdn.net/xiangxizhishi/article/details/79441391



Docker 架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。

Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类



Docker 术语


集群


一个集群指容器运行所需要的云资源组合,关联了若干服务器节点、负载均衡、专有网络等云资源。


节点


一台服务器(可以是虚拟机实例或者物理服务器)已经安装了 Docker Engine,可以用于部署和管理容器;容器服务的 Agent 程序会安装到节点上并注册到一个集群上。集群中的节点数量可以伸缩。


容器


一个通过 Docker 镜像创建的运行时实例,一个节点可运行多个容器。


镜像


Docker 镜像是容器应用打包的标准格式,在部署容器化应用时可以指定镜像,镜像可以来自于 Docker Hub,阿里云容器 Hub,或者用户的私有 Registry。镜像 ID 可以由镜像所在仓库 URI 和镜像 Tag(缺省为 latest)唯一确认。


编排模板


编排模板包含了一组容器服务的定义和其相互关联,可以用于多容器应用的部署和管理。容器服务支持 Docker Compose 模板规范并有所扩展。


应用


一个应用可通过单个镜像或一个编排模板创建,每个应用可包含 1 个或多个服务。


服务


一组基于相同镜像和配置定义的容器,作为一个可伸缩的微服务。


关联关系


关联关系



Docker 使用



Docker 安装


安装说明:

  1. CentOS6.10 环境,要求 6.8+
  2. Docker 版本 1.7.1


步骤 1:

配置下载镜像

docker.repo

文件

CentOS6 安装方法

[root@yinsho ~]# cat /etc/yum.repos.d/docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/6
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

CentOS7 安装方法

[root@yinsho ~]# cat /etc/yum.repos.d/docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg


步骤 2:

重建元数据

yum clean all
yum makecache


步骤 3:

安装 docker

yum install docker-engine  -y

问题: docker-engine conflicts

# 如果执行报错 docker-engine conflicts with xxxxx
# 先卸载 docker,再安装 docker-engine
yum remove docker -y


步骤 4:

启动 docker 服务

service docker start
chkconfig docker on


步骤 5:

非 root 用户使用 docker. 将用户添加到 docker 用户组

sudo groupadd docker
sudo usermod -aG docker $USER


# 添加用户组后 必须重启服务
# Centos7
sudo systemctl restart docker
sudo systemctl enable docker
# CentOS6
sudo service restart docker
sudo chkconfig on docker

# 添加用户组后 必须切换当前会话到新 group 或者重启 X 会话
newgrp - docker 或  pkill X


参考说明:

xxx

安装参考链接:

https://blog.csdn.net/abcd_d_/article/details/53996791

yum update -y

如果报错 No module named yum

参考: https://www.cnblogs.com/clover-siyecao/p/5650893.html

rpm -Uvh http://ftp.riken.jp/Linux/fedora/epel/6Server/x86_64/epel-release-6-8.noarch.rpm

yum remove docker -y

yum install -y docker-io



Docker 常用命令

# Docker服务启停
service docker restart
# 创建一个容器
docker run -it -v /docker_test:/yufei --name yufei_6 centos
参数说明
-i: 允许我们对容器内的 (STDIN) 进行交互
-t: 在新容器内指定一个伪终端或终端
-v: 是挂在宿机目录, /docker_test是宿机目录,/yufei是当前docker容器的目录,宿机目录必须是绝对的。
--name: 是给容器起一个名字,可省略,省略的话docker会随机产生一个名字
# 查看docker容器列表(运行中)
docker ps
# 查看所有的docker容器列表
docker ps -a
# 启停容器
docker start yufei_01
docker stop yufei_01
docker restart yufei_01
# 查看容器的日志
docker logs -f yufei_01
# 删除容器,如果容器在运行需要先停止
docker stop yufei_01
docker rm yufei_01
# 删除所有容器
docker rm $(docker ps -a -q)



# Docker服务启停
service docker start
service docker stop
service docker restart

# Docker网络管理
docker network create --subnet=172.18.0.0/16 extnetwork #创建网络
docker network ls #列出当前所有网络
docker network rm extnetwork #删除网络

# 创建一个容器
docker run --privileged=true -m 8000M --cpus=2 -itd --name 12306 --net extnetwork --ip 172.18.0.72 docker_7 /usr/sbin/init
参数说明
-i:允许我们对容器内的 (STDIN) 进行交互
-t:在新容器内指定一个伪终端或终端
-d: 后台运行
--privileged=true 如果不加此参数,root也可能会部分操作无权限
-m 限制最大使用内存
--cpus cpu使用限制
--name:是给容器起一个名字
--net 指定网段
--ip 指定ip
参数里面的centos是镜像名字,如果本地无名字对应的镜像,则会在网络上寻找,并自动下载到本地,若不指定版本,则下载最新版本

# 查看docker容器列表(运行中)
docker ps
# 查看所有的docker容器列表
docker ps -a

# 启停容器
docker start docker_7
docker restart docker_7
docker stop docker_7

# 删除容器,如果容器在运行需要先停止
docker stop docker_7
docker rm docker_7

# 容器保存为镜像
docker commit docker_7 img_docker_7

# 镜像导入导出
docker export docker_7 -o docker_7.tar
docker import docker_7.tar docker_7



Docker 命令大全

  • Docker 命令大全:

    http://www.runoob.com/docker/docker-command-manual.html

  • 容器生命周期管理

    • docker run 创建一个新的容器并运行一个命令
    • docker restart 重启容器
    • docker kill -s KILL mynginx 杀掉一个运行中的容器。 -s :向容器发送一个信号
    • docker rm : 删除一个或多少容器
    • docker pause :暂停容器中所有的进程。
    • docker unpause :恢复容器中所有的进程。
    • docker create : 创建一个新的容器但不启动它
    • docker exec : 在运行的容器中执行命令
  • 容器操作

    • docker ps :  列出容器
    • docker inspect :  获取容器/镜像的元数据。
    • docker top :查看容器中运行的进程信息,支持 ps 命令参数
    • docker attach :连接到正在运行中的容器
    • docker events :  从服务器获取实时事件
    • docker logs :  获取容器的日志
    • docker wait :  阻塞运行直到容器停止,然后打印出它的退出代码
    • docker export :将文件系统作为一个 tar 归档文件导出到 STDOUT
    • docker port :列出指定的容器的端口映射,或者查找将 PRIVATE_PORT NAT 到面向公众的端口。
  • 容器 rootfs 命令

    • docker commit :从容器创建一个新的镜像。
    • docker cp :用于容器与主机之间的数据拷贝
    • docker diff :  检查容器里文件结构的更改
  • 镜像仓库

    • docker login :  登陆到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hubdocker
    • docker logout :  登出一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
    • docker pull :  从镜像仓库中拉取或者更新指定镜像
    • docker push :  将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
    • docker search: 从 Docker Hub 查找镜像
  • 本地镜像管理

    • docker images :  列出本地镜像
    • docker rmi :  删除本地一个或多少镜像
    • docker tag :  标记本地镜像,将其归入某一仓库
    • docker build  命令用于使用 Dockerfile 创建镜像
    • docker history :  查看指定镜像的创建历史
    • docker save :  将指定镜像保存成 tar 归档文件
    • docker import :  从归档文件中创建镜像
  • info|version

    • docker info : 显示 Docker 系统信息,包括镜像和容器数。
    • docker version :显示 Docker 版本信息



docker 命令样例


# 启动镜像时,设定docker系统参数 - 修改系统参数 生效
docker run -it -d -p 80:80 -p 3000:3000 -p 8080:8080 -p 9200:9200 -p 5600:5602 -p 5601:5601 --env=vm.max_map_count=262144 fdm_docker_ok /bin/bash

镜像的导入导出
# 导出镜像 images
sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
sudo docker save -o /home/user/images/ubuntu_14.04.tar ubuntu:14.04
# 导入镜像
sudo docker load --input ubuntu_14.04.tar
sudo docker load < ubuntu_14.04.tar


镜像删除
docker rmi images_id


容器模块

查看容器的环境变量
* 使用docker inspect命令来查看
# docker inspect <CONTAINER-NAME> OR <CONTAINER-ID>
* 使用docker exec -it <CONTAINER-NAME> OR <CONTAINER-ID> env查看

docker镜像启动命令 - 镜像启动每次容器ID都会变更
docker run -it -d -p 50001:22  -p 80:80 -p 3000:3000 -p 8080:8080 -p 9200:9200 -p 5600:5602 -p 5601:5601 --env=vm.max_map_count=262144  fdm_docker /bin/bash

docker 容器启动命令
docker container start 4d15e75d1116 

进入docker容器中
docker exec -it fa6e4ac38997 /bin/bash

查看容器ID
# 查看当前运行的容器
docker ps
# 查看历史所有的容器
docker ps -a 
可以通过启动历史容器,并进入

保存容器为镜像
docker ps -a 
可以通过启动历史容器,并进入


容器的导入导出
# 容器的导入
docker import fdm_docker.tar.gz  fdm_docker
# 将容器保存为镜像
docker commit 8e613c207029 fdm_docker02 




其他模块

其他模块
使用xshell登录docker -- 方式1 进入docker虚拟机
ssh 192.168.99.100 # docker的IP ,通过查看docker虚拟机的ip登入docker界面
用户名默认是: docker
密码默认: tcuser
端口: 22

# 涉及安装openssh-server
http://blog.csdn.net/vincent2610/article/details/52490397
yum install -y openssh-server
vi /etc/ssh/sshd_config
将PermitRootLogin的值从withoutPassword改为yes
登出容器,并将容器保存为新的镜像。
关闭原有容器,用新镜像生成新的容器
使用xshell登录docker -- 方式2 docker进入容器
1.安装配置好sshd,并进入后重启服务。
2.docker run 通过 -p 50001:22,将22端口映射到50001
3.打开cmd,查看windwosIP,例如 192.168.43.25
4.ssh 192.168.43.25 50001
或者 ssh 192.168.43.25 -p 50001
即可登录进入容器中


配置容器系统参数 - 需要从docker上配置
# sysctl: setting key "vm.max_map_count": Read-only file system 问题
参考链接: https://stackoverflow.com/questions/41064572/docker-elk-vm-max-map-count
说明: 由于docker是最高层级,容器是最低层级,部分系统参数需要从docker中修改,否则权限不足
解决方法:
docker-machine create -d virtualbox default # 创建默认虚拟机,涉及需要开启windows功能 Hyper-V
docker-machine start 机器名称 # 出现蓝屏问题,暂时未解决 PASS
docker-machine ssh
sudo sysctl -w vm.max_map_count=262144
配置容器系统参数 - 需要从docker上配置  -- 问题1: 登陆docker界面,但是docker中virtualbox不存在。

# 查看已有的docker-machine机器名称
docker-machine ls
# 进入docker
docker-machine ssh 机器名称ID


错误: Error: No machine name(s) specified and no "default" machine exists
错误原因: 本机没有machine,需要创建
# 创建docker机器
docker-machine create -d virtualbox default 机器名称

错误: Error with pre-create check: "This computer is running Hyper-V. VirtualBox won't boot a 64bits VM when Hyper-V is activated. Either use Hyper-V as a driver, or disable the Hyper-V hypervisor. (To skip this check, use --virtualbox-no-vtx-check)
错误原因: docker的virtualbox和已有的虚拟机VMware或virtualBox冲突
参考链接: http://blog.csdn.net/qwsamxy/article/details/50533007/
解决方法:
bcdedit /set hypervisorlaunchtype off
bcdedit /set hypervisorlaunchtype auto


bcdedit /copy {current} /d "Windows 10 (开启 Hyper-V)"
bcdedit /set {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} hypervisorlaunchtype auto

![ce8948b05eeb29c99a714e80749170f0.png](en-resource://database/14842:0)




切换用户执行脚本
su - test -c "pwd"
删除images后,释放空间: (会删除未使用的的容器和已删除的镜像-慎重)
docker system prune -a




## docker-ce容器管理页面

参考链接: https://www.cnblogs.com/myzony/p/9071210.html

pass
CentOS7可用?



Docker 功能



Docker 镜像/容器位置迁移

由于系统配置时,

/

根目录空间位置不足,导致空间不够,需要更改 Docker 存储位置

# 先关闭 docker 容器
docker stop xxxx
# 关闭 docker 服务
systemctl stop docker
# 迁移数据
mv /var/lib/docker /home/docker_data
ln -s /home/docker_data /var/lib/docker
# 重启服务
systemctl start docker



Docker 网络配置使用



参考链接

docker 基础命令: https://www.server110.com/docker/201411/11122.html

docker run 参数: http://www.runoob.com/docker/docker-run-command.html

docker 官方英文文档: https://docs.docker.com/

docker 中文文档网站: http://www.docker.org.cn/

第一本 docker 书籍: https://download.csdn.net/download/qq_21165007/10276074

Docker 是一个开源的应用容器引擎,基于  Go 语言   并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。


Docker 参考链接:



Docker 性能监控

不同方法:

  • 官方 docker stats
  • ps -e
  • ctop



docker stats

参考链接:

docker stats -a

Module_Docker_性能监控01.png



ps -e

查看 Docker 运行情况

ps aux | grep  d276413151a0
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'  | grep 8189

rsz 为实际占用内存



ctop

参考链接:

实时查看 Docker 容器占用的 CPU、内存状态

wget https://github.com/bcicen/ctop/releases/download/v0.5/ctop-0.5-linux-amd64 -O ctop
sudo mv ctop /usr/local/bin/.
sudo chmod +x /usr/local/bin/ctop
ctop

Module_Docker_性能监控02.png



docker 问题记录



问题: FATA[0000] Get http:///var/run/docker.sock/v1.18/images/json: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?

参考链接:

Are you trying to connect to a TLS-enabled daemon without TLS?

问题原因: 非 root 用户未成功添加到用户组或未生效

解决方法:

# 创建 docker 用户组
sudo groupadd docker
# 添加用户到用户组
sudo gpasswd -a ${USER} docker
# 重启服务
sudo service docker restart
# 切换当前会话到新 group 或者重启 X 会话 [必须步骤]
newgrp - docker 或 pkill X



问题: Repository dgraph/dgraph already being pulled by another client. Waiting.

解决方法: 重启服务

[root@WOdocker pull dgraph/dgraph:latest
Repository dgraph/dgraph already being pulled by another client. Waiting.

[root@WOM ~]#
[root@WOM ~]# service docker restart
停止 docker:                                               [确定]
Starting docker:                                       [确定]
[root@WOM ~]#
[root@WOM ~]# docker pull dgraph/dgraph:latest




[root@WOM ~]# docker pull dgraph/dgraph:latest
latest: Pulling from dgraph/dgraph

f2b818b26f75: Pulling fs layer
c87298e9b6ec: Pulling fs layer
d29d3718cea9: Pulling fs layer
55982ec1ed3b: Pulling fs layer
a5019d93caef: Pulling fs layer
cea85299b18b: Pulling fs layer
4696dbf656b6: Pulling fs layer
c2c5bc4dfb3f: Pulling fs layer
bd8f9f1a25f5: Pulling fs layer
ca927ff9c37d: Pulling fs layer
8e51752bd503: Pulling fs layer
c58a4ff12da9: Pulling fs layer
Pulling repository dgraph/dgraph
Tag latest not found in repository dgraph/dgraph # 1.说明标签错误
[root@WOM ~]# docker search dgraph  # 2.搜索这个镜像,看是否可以找到标签
NAME                                       DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
dgraph/dgraph                              Docker image for Dgraph (https://github.co...   22                   
arubeh/dgraph                                                                              1                    
jalberto/dgraph                                                                            0                    
ibbd/dgraph                                IBBD Dgraph                                     0                    [OK]
dancompton/dgraph                                                                          0                    
euforia/dgraph                                                                             0                    
dotf/dgraph                                                                                0                    
jonrmayer/dgraph                           added another volume to dgraph                  0                    [OK]
dotf/dgraphzero                                                                            0                    
priyanshujain/dgraph                                                                       0                    
alexmilowski/dgraph                                                                        0                    
doc2run/dgraph                             Dgraph DB                                       0                    
demandjump/dgraph                                                                          0                    
bnjainonday198v/dgraphicsdesignsoftw4282   3D Graphics Design Software Download # Fre...   0                    
akshaydeo/mnet                             Kafka, Cassandra, Redis, DGraph, Postgresql     0                    
taylorsmithgg/dgraph                                                                       0                    
qnib/plain-dgraph                          Plain image holding Dgraph, a graph databa...   0                    [OK]
# 3.去官网查看标签  查询URL为:  https://hub.docker.com/r/【镜像名】/tags/
# https://hub.docker.com/r/dgraph/dgraph/tags/






问题:Segmentation Fault or Critical Error encountered

提示: Segmentation Fault or Critical Error encountered. Dumping core and aborting.

Aborted

解答: 安装错误安装 docker 了,应该安装 docker-io



问题:docker-io-1.7.1-2.el6.x86_64

提示: Transaction Check Error:

file /usr/bin/docker from install of docker-io-1.7.1-2.el6.x86_64 conflicts with file from package docker-1.5-5.el6.x86_64

解答: 这个是因为先装了 docker,再装 docker-io 后的结果,解决方法是 yum remove docker 后再 yum install docker-io 即可。



问题:/var/run/docker.sock: no such file or directory

提示: Get http:///var/run/docker.sock/v1.19/images/search?term=centos: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a ?

解答: docker 没有启动,/etc/init.d/docker start



问题: 容器内中文乱码

[root@c7c57188b482 test_data]# ll
total 4
drwxrwxrwx 5 root root 4096 Oct 15 02:58 graph_data
-rwxr-xr-x 1 root root    0 Oct 15 02:58 ????????????

解决方法:

yum install -y kde-l10n-Chinese
yum reinstall -y glibc-common

# 定义字符集
localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
# 确认载入成功
locale -a
# echo
echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
source /etc/locale.conf

如果不能解决,可以用如下方法

echo "exprot LC_ALL=en_US.utf8" >> ~/.bash_profile
# 在用户中加入这个, 或者在 /etc/profie 中加入
# 不是一个好方法,但是可以解决问题




/var/run/docker.sock: connect: permission denied

解决方法

(env) [scfan@fdm docker_cmd]$  docker import docker_7.tar docker_7
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/images/create?fromSrc=-&message=&repo=docker_7&tag=: dial unix /var/run/docker.sock: connect: permission denied
(env) [scfan@fdm docker_cmd]$ sudo chmod 777 /var/run/docker.sock



版权声明:本文为qq_21165007原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。