Docker

 

目录

1、Dokcer

2、为什么要用Docker?

3、Linux云服务器Centos7安装Docker

4、Docker仓库、镜像、容器

4.1 、镜像管理

 4.2 、容器

4.3、仓库

5、Docker容器常见命令

举栗子 

docker 项目部署

移除docker 

docker 部署Mysql

docker 部署gitlab

常用命令

问题



1、Dokcer


           一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口;

            使用go语言编写,在LCX(linux容器)基础上进行的封装

            简单来说:
                1)就是可以快速部署启动应用
                2)实现虚拟化,完整资源隔离
                3)一次编写,四处运行(有一定的限制,比如Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用)

2、为什么要用Docker?


            1、提供一次性的环境,假如需要安装Mysql,则需要安装很多依赖库、版本等,如果使用Docker则通过镜像就可以直接启动运行   

            2、快速动态扩容,使用docker部署了一个应用,可以制作成镜像,然后通过Dokcer快速启动

            3、组建微服务架构,可以在一个机器上模拟出多个微服务,启动多个应用

            4、更好的资源隔离和共享

            一句话:开箱即用,快速部署,可移植性强,环境隔离

 

3、Linux云服务器Centos7安装Docker

阿里云Docker安装手册                        Docker Hub

Docker常见问题                                  Docker 教程

  1. 添加yum源
    # yum install epel-release –y  //安装Linux的epel的yum源的命令
    # yum clean all  //清理yum缓存
    # yum list //列出所有可安裝的软件清单命令
  2. 安装并运行Docker
    # yum install docker-io –y  //安装docker
    # systemctl start docker   //以守护进程启动docker
  3. 检查安装结果
     # docker info

 

4、Docker仓库、镜像、容器

输入 docker 命令来查看到 Docker 客户端的所有命令选项。

4.1 、镜像管理

容器运行时的只读模板,操作系统+软件运行环境+用户程序。镜像按照java的理解就是一个domain类。

class docker{
    private String mysql;
    private String rabbitmq;
}
  • 查看镜像
#docker images

REPOSITORY:表示镜像的仓库源

TAG:镜像的标签

IMAGE ID:镜像ID

CREATED:镜像创建时间

SIZE:镜像大小

  • 强制删除镜像。
# docker rmi –f registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5

 4.2 、容器

容器包含了某个应用运行所需要的全部环境。容器就类似于java中new Docker()。每个容器中包含着镜像。

容器是一个标准的软件单元,它将代码及其所有依赖关系打包,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境。Docker容器映像是一个轻量级,独立的可执行软件包,包含运行应用程序所需的一切:代码,运行时,系统工具,系统库和设置。

4.3、仓库

配置国内镜像仓库(参考)

用来保存镜像,有公有和私有仓库。仓库就跟Maven的中央仓库和本地私服差不多。

5、Docker容器常见命令

  • 搜索镜像  docker search xxxx
  • 列出当前系统存在的镜像:docker images
  • 拉取镜像:docker pull xxx     

 xxx:具体镜像名(格式 REPOSITORY:TAG)REPOSITORY:表示镜像的仓库源,TAG:镜像的标签

  • 运行容器 docker run -d --name "xdclass_mq" -p 5672:5672 -p 15672:15672 rabbitmq:management

-d 后台运行       -p 端口映射      --name "xxx"

rabbitmq:management  (格式 REPOSITORY:TAG),如果不指定tag,默认使用最新的

  • 列举当前运行的容器:docker ps
  • 检查容器内部信息:docker inspect 容器名称
  • 删除镜像:docker rmi IMAGE_NAME

        强制移除镜像不管是否有容器使用该镜像 增加 -f 参数

  • 停止某个容器:docker stop 容器名称
  • 启动某个容器:docker start 容器名称
  • 移除某个容器: docker rm 容器名称 (容器必须是停止状态)

举栗子 

  •         1、获取镜像 

            docker run (首先会从本地找镜像,如果有则直接启动,没有的话,从镜像仓库拉起,再启动)

            docker search nignx

  •         2、列举

            docker images

  •         3、拉取

            docker pull nignx

  •         4、启动

            docker run -d --name "tcq" -p 8088:80 nginx

            docker run -d --name "tcq2" -p 8089:80 nginx

  •         5、访问

docker 项目部署

 

用root用户,将docker-18.06.1-ce.tgz和docker.service上传到/data/hcfapp

解压docker-18.06.1-ce.tgz

[root@vatmpappqp01 data]# cd hcfapp

[root@vatmpappqp01 hcfapp]# tar -zxvf docker-18.06.1-ce.tgz

 

将解压后的文件复制到 /usr/bin目录下,然后给文件授权

[root@vatmpappqp01 hcfapp]# sudo cp docker/* /usr/bin/

[root@vatmpappqp01 hcfapp]# sudo chmod +x /usr/bin/docker*

 

将docker.service文件复制到/usr/lib/systemd/system/中,执行下述命令:

[root@vatmpappqp01 hcfapp]# cp docker.service /usr/lib/systemd/system/

[root@vatmpappqp01 hcfapp]# sudo systemctl daemon-reload

#设为开机自启

[root@vatmpappqp01 hcfapp]# sudo systemctl enable docker

#启动docker

[root@vatmpappqp01 hcfapp]# sudo systemctl start docker

 

安装成功检查

[root@vatmpappqp01 hcfapp]# docker -v

Docker version 18.06.1-ce, build e68fc7a

 

修改docker镜像默认存储路径

[root@vatmpappqp01 hcfapp]# mkdir dockerpath

[root@vatmpappqp01 hcfapp]# chmod 777 dockerpath

[root@vatmpappqp01 hcfapp]# cd /etc/docker

[root@vatmpappqp01 docker]# touch daemon.json

在/etc/docker/daemon.json 文件里添加下述内容

{

"graph":"/data/hcfapp/dockerpath"

}

 

重启docker

[root@vatmpappqp01 docker]# sudo service docker restart

[root@vatmpappqp01 docker]# sudo docker info

移除docker 

停止docker服务
[root@sfapprodtestap1 hcfapp]# service docker stop
查看docker进程
[root@sfapprodtestap1 hcfapp]# ps -ef | grep docker
root     26471 20079  0 13:09 pts/0    00:00:00 grep --color=auto docker
删除docker目录和文件
[root@sfapprodtestap1 hcfapp]# rm -rf /usr/bin/docker*
[root@sfapprodtestap1 hcfapp]# rm -rf /usr/lib/systemd/system/docker.service
[root@sfapprodtestap1 hcfapp]# rm -rf /data/hcfapp/dockerpath
[root@sfapprodtestap1 hcfapp]# rm -rf /etc/docker/*

[root@sfapprodtestap1 hcfapp]# df -h|grep kubelet |awk -F % '{print $2}'|xargs umount
[root@sfapprodtestap1 hcfapp]# rm /var/lib/kubelet/* -rf
[root@sfapprodtestap1 hcfapp]# rm /etc/kubernetes/* -rf
[root@sfapprodtestap1 hcfapp]# rm /var/lib/rancher/* -rf
[root@sfapprodtestap1 hcfapp]# rm /var/lib/etcd/* -rf
[root@sfapprodtestap1 hcfapp]# rm /var/lib/cni/* -rf
[root@sfapprodtestap1 hcfapp]# iptables -F && iptables -t nat -F
[root@sfapprodtestap1 hcfapp]# ip link del flannel.1
[root@sfapprodtestap1 hcfapp]# ip link del tunl0

 

清除docker日志

#!/bin/sh 

echo "======== start clean docker containers logs ========" 

logs=$(find $1 -name *-json.log) 

for log in $logs 
    do 
        echo "clean logs : $log" 
        cat /dev/null > $log 
    done 

echo "======== end clean docker containers logs ========" 

执行命令 sh clean_docker_log 路径

docker 部署nexus

执行命令 sudo docker pull sonatype/nexus3
执行命令将拉取的镜像保存为可以导入的压缩文件 nexus.tar.gz

    sudo docker save sonatype/nexus3 |gzip -c > nexus.tar.gz

将上述导出的 nexus.tar.gz 文件复制到离线的服务器 运行 下述 命令导入镜像

    sudo docker load --input nexus.tar.gz

执行下述命令运行 nexus

    mkdir -p /app/nexus-data | chmod -R 777 /app/nexus-data

   sudo docker run --restart=unless-stopped -d -p 5000-5010:5000-5010 -p 8081:8081 -v /app/nexus-data:/nexus-data --name nexus sonatype/nexus3

说明:

-p 表示将服务器的端口与容器端口映射

-v 表示将服务器的目录与容器的目录映射

其中neuxs映射的服务器路径要有权限

其中8081端口是对应nexus的管理界面的端口

5000-5010 表示50005010端口,后面创建私有仓库时端口必须在50005010之间

登录 nexus 控制台 IP:8081 其中 8081 为上一步映射的主机端口
服务器命令行进入 /app/nexus-data 目录,查看 admin.password 文件,看 admin 用户的 密码

    其中: /app/nexus-data是主机映射到容器目录/nexus-data的目录

nexus 管理界面按提示步骤进行操作,进入控制台

docker 部署Mysql

导入mysql镜像

导入下载 好的 mysql 镜像 文件 (mysql-5.7.tar.gz )

  命令

   sudo docker load --input mysql-5.7.tar.gz

将镜像 push 到私有仓库

  命令  

  sudo docker tag mysql:5.7 私有仓库地址/命名空间/mysql:5.7

  sudo docker login 私有仓库地址  (登录过就可以不需要登录了)

  sudo docker push私有仓库地址/命名空间/mysql:5.7

创建数据目录
mkdir -p /app/mysql/ conf
mkdir -p /app/mysql/logs
mkdir -p /app/mysql/data
chmod -R 777 / app/mysql
复制 mysql 配置文件到 /app/mysql/ conf 目录。 注意: 不能给mysql配置文件授权777,Mysql认为该文件权限过高,安全性不能保证导致配置文件被忽略掉了)
运行
sudo docker run -p 3306 :3306 -d --restart=unless-stopped --name mysql -v /app/mysql/conf:/etc/mysql/conf.d -v /app/mysql/data:/var/lib/mysql -v /app/mysql/logs:/logs -e MYSQL_ROOT_PASSWORD=123456 -d  私有仓库地址 / 命名空间 /mysql:5.7
其中
-p 表示主机和容器的端口做映射
-v 表示主机和容器目录进行挂载
-e 表示设置容器环境变量的值,这里表示 mysql root 用户的密码

docker 部署gitlab

docker run -it --publish 8443:443 --publish 8080:80 --publish 2222:22 --name gitlab --restart always --volume /Users/rookie/gitlab/conf:/etc/gitlab --volume /Users/rookie/gitlab/logs:/var/log/gitlab --volume /Users/rookie/gitlab/data:/var/opt/gitlab -d gitlab/gitlab-ce:latest

 

常用命令

  • 关闭docker : service docker stop
  • 守护进程启动: sudo systemctl docker start
  • 查看日志: docker logs [CONTAINER]
  • 根据条件移除指定运行中的镜像: docker stop $(docker ps | grep 'rancher' | awk '{print $1}')
  • 停止所有容器: docker stop $(docker ps -aq)
  • 删除所有容器: docker rm -f $(docker ps -qa)  (慎用: 会将所有容器都移除,包括启动中、未启动。)

问题

Error response from daemon: Cannot restart container 685ee63e6fd9: driver failed programming external connectivity on endpoint nexus (3ee26238a4c2382efb8e5ad788bbb14f7cd064d81b51ee549b0a0048c388ca99): Bind for 0.0.0.0:10081 failed: port is already allocated
 

Docker run出现no space left on device: https://blog.csdn.net/dinofish/article/details/90450410

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值