首页 > 其他分享 >docker实战教程

docker实战教程

时间:2023-06-08 18:38:44浏览次数:56  
标签:实战 容器 教程 -- redis mysql 镜像 docker

基础篇

一、什么是docker

解决了运行环境和配置问题的软件容器。方便做持续集成并有助于整体发布的容器虚拟技术。

一次构建,随处运行。

官网:docker官网:http://www.docker.com

仓库 Docker Hub官网:https://hub.docker.com

CentOS 7 仅发行版本中的内核支持Docker。Docker运行在CentOS 7 上,系统要求64位,Linux系统内核3.8以上。

cat /etc/redhat- release 或 uname -r 查看系统相关信息 或 内核版本

Docker 三件套 镜像(image)、容器(container)、仓库(repository)

Docker本身是一个容器运行载体或称之为管理引擎。

一个镜像可以创建很多个容器。应用程序和配置环境打包形成一个可交付的运行环境即镜像。

容器类似于一个虚拟化的运行环境,是用镜像创建的运行实例。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。容器可以看做是一个简易版的Linux环境。一个容器运行一种服务。

仓库(repository)是集中存在镜像文件的场所。Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。

二、Centos Docker安装

https://docs.docker.com/engine/install/centos/

1、卸载旧版本

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2、安装gcc相关

yum -y install gcc
yum -y install gcc-c++

安装软件包(提供实用程序)并设置存储库。yum-utils yum-config-manager

$ sudo yum install -y yum-utils

$ yum-config-manager  --add-repo  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、更新yum软件包索引

 yum makecache fast

4、安装 Docker

sudo yum install docker-ce docker-ce-cli containerd.io 

5、启动 Docker,查看版本

sudo systemctl start docker
docker version

验证是否安装成功

sudo docker run hello-world

6、卸载

sudo systemctl start docker
sudo yum remove docker-ce docker-ce-cli containerd.io 
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

7、配置阿里云镜像加速

​ 用个人阿里云账号登录,找到弹性计算——容器镜像服务——实例列表——镜像工具——镜像加速器,出现加速器地址,按照上面的方法配置。

8、在ubuntu上安装docker

sudo apt-get update
sudo apt-get upgrade
sudo apt-get -y insatll gcc
sudo apt-get -y install build-essential
# 安装系统工具
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# 安装gpg证书 
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -
# 安装docker
# sudo apt-get install docker-ce docker-ce-cli containerd.io
# 使用官方安装脚本自动安装 , 安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
# 在ubuntu上启动docker
service docker start # (这里把我坑惨了,启动不起老找不到原因)
# 在Centos上启动
# systemctl start docker

9、在 docker上使用mysql镜像

docker pull mysql
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
# docker run -p 3306:3306 --name qmm-mysql -v ~/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=669988  -d mysql:5.6
# 创建容器时,最后mysql:5.6表示mysql镜像的版本,可以写,表示指定该版本;
# 如果不写也可以,docker会自动在本地检测有没有最新的,如果没有会自动去docker hub上去下载。

三、docker常用命令

1、帮助启动类命令

启动docker :systemctl start docker (ubuntu)

​ service docker start (centos 7)

停止docker:systemctl stop docker

重启docker:systemctl restart docker

查看docker状态:systemctl status docker

开机启动:systemctl enable docker

查看docker概要信息:docker info

查看docker总体帮助文档:docker --help

查看docker命令帮助文档:docker 具体命令 --help

2、镜像命令

1、docker images 列出本地的镜像 -a 列出本地所有镜像(含历史映像层) -q 只显示镜像ID

格式:仓库源 标签版本号 镜像ID 创建时间 大小

2、docker search 镜像名 搜索镜像 --limit 只列出N个镜像,默认25个

例如:docker search --limit 5 redis

3、docker pull 镜像名字[:TAG] 没有TAG就是最新版

4、docker system df 查看镜像、容器、数据卷所占的空间。

5、docker rmi 镜像ID -f 强制删除

docker rmi -f 镜像ID    # 删除单个
docker rmi -f 镜像名1:TAG 镜像名2:TAG   # 删除多个
docker rmi -f $(docker images -qa)   # 删除全部

3、容器相关的命令

创建交互式终端容器

docker run -it ubuntu /bin/bash    
-i        # 交互式操作
-t        # 终端
ubuntu    # 镜像
/bin/bash     # 放在镜像名后的命令,用/bin/bash 交互

docker run -it --name=myu1 ubuntu bash
--name   # 指定name,不指定系统分配
bash     # 和 /bin/bash 一样
-d          # 后台运行并返回容器ID,即启动守护式容器后台运行
-p(小写)    # 指定要映射的IP和端口,但是在一个指定端口上只可以绑定一个容器
            # 支持的格式有 hostPort:containerPort、ip:hostPort:containerPort、 ip::containerPort
-P(大写)    # Docker会随机映射一个 49000~49900 的端口到内部容器开放的网络端口

列出当前所有在运行的容器

docker ps
-a      #  列出当前所有正在运行的容器 + 历史运行过的
-l      #  显示最近创建的容器
-n      #  显示最近n个创建的容器
-q      #  静默模式,只显示容器编号

退出容器

两种方式
exit         #  run进去容器,exit退出,容器停止
ctrl+p+q     #  run进去容器,退出容器不停止

启动、停止、重启、删除 容器

# 启动已停止运行的容器
docker start 容器ID 或 容器名
# 重启容器
docker restart 容器ID 或 容器名
# 停止容器
docker stop 容器ID 或 容器名
# 强制停止容器
docker kill 容器ID 或 容器名
# 删除容器,先停止再删除,没有停止的 -f 强制删除
docker rm 容器ID 或 容器名
# 一次性删除多个容器实例
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

4、重要

1、启动守护式容器(后台服务)

​ docker容器后台运行必须有一个前台进程,否则会立即自杀(docker run redis)

# 后台守护式启动
docker run -d redis
# 前台交互式启动, bash 可省略
docker run -it redis

2、查看容器日志

docker logs 容器ID

3、使用 docker run -it ubuntu /bin/bash 进入后,ctrl+p+q 退出后,

​ docker exec -it 容器id /bin/bash 再次进入交互,退出交互使用exit,不会导致容器退出

​ docker attach 容器ID,再次进入交互,不会启动新的进程,用exit退出,会导致容器的停止。

​ 推荐使用 docter exec -it 容器ID 命令。

4、查看容器运行的情况 docker ps

5、查看容器内部后台情况 docker top 容器ID

6、查看容器内部细节 docker inspect 容器ID

7、从容器内拷贝文件到主机上

​ docker cp 容器ID:容器内路径 目的主机路径

8、导入和导出容器

​ docker export 容器ID > 文件名.tar

​ cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

四、Docker镜像

1、docker commit

# 先进入容器,然后下载vim
apt-get update
apt-get -y install vim
# 提交镜像
docker commit -m='描述' -a='提交人' 镜像ID 要创建的目标镜像名:[标签名]

2、本地镜像发布到阿里云

3、搭建私有镜像仓库

1、下载镜像Docker Registry (docker pull registry)

2、运行私有库Registry,相当于在本地有个私有Docker hub

docker run -d -p 5000:5000 -v /zzyyuse/myregistry:/var/lib/registry --privileged=true registry   
# -d 后台运行
# -p 指定映射端口
# 仓库被创建在容器的 /var/lib/registry 目录下
# privileged=true 开启权限
# -v 添加自定义的容器卷
#  : 号 左边是宿主机的路径,右边是容器内的路径

3、创建一个镜像

docker pull ubuntu               # 拉一个原始镜像
docker run -if ubuntu /bin/bash  # 进入镜像
apt-get update
apt-get -y install net-tools     # 安装ifconfig命令
docker commit -m='描述' -a='提交人' 镜像ID 要创建的目标镜像名:[标签名]    # 提交

4、查询私有仓库上有什么镜像

curl - XGET http://192.168.111.167:5000/v2/_catalog   # IP为自己主机的IP

5、将新镜像修改符合私有仓库规范的TAG

docker tag 名字:TAG 192.168.111.167:5000/名字:TAG

6、修改配置文件使之支持http

cat /etc/docker/daemon.json
# 这个文件之前配置阿里云加速器的时候已经配置过
# 再加上一句  "insecure-registries":["192.168.111.167:5000"]
# 修改之后需要重启docker,最新版本的docker不需要重启
systemctl restart docker
systemctl status docker
# 然后再启动私有仓库
docker run -d -p 5000:5000 -v /zzyyuse/myregistry:/var/lib/registry --privileged=true registry

7、push推送镜像到私有仓库

docker push 192.168.111.167:5000/名字:TAG

8、验证是否push成功

curl - XGET http://192.168.111.167:5000/v2/_catalog   

9、pull到本地运行

docker pull 192.168.111.167:5000/名字:TAG

五、容器数据卷

将docker容器内的数据保存进宿主机的磁盘中。

特点:

  1. 数据卷可在容器之间共享或重用数据
  2. 卷中的更改可以直接实时生效,爽
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

运行一个带有容器卷功能的容器实例

docker run -it --privileged=true -v /宿主机绝对路径:/容器内目录 --name 容器名 镜像名
docker run -it --privileged=true -v /宿主机绝对路径:/容器内目录:ro 镜像名   # ro 代表容器内只读权限 rw  读写权限

-v 后的宿主机路径 和 容器内目录 可以共享数据

# --volumes-from u1,  继承u1,  u1 是 --name 后起的名字,u2 继承 u1  u2 和 u1 可以共享数据,映像到宿主机的路径相同
docker run -it --privileged=true --volumes-from u1 --uname u2 ubuntu

六、docker下常规软件的安装

1、安装tomcat

docker search tomcat
docker pull tomcat
docker images tomcat
docker run -it -p 8080:8080 --name t1 tomcat
# 这样下载到的tomcat是最新版的,使用 http://localhost:8080 访问不到,需要删除docker下的webapps,把webapps.dist 改名为webapps
#可是拉取下面的tomcat镜像,安装后可直接访问
docker pull billygoo/tomcat8-jdk8

2、安装mysql

docker pull mysql:5.7
docker images mysql:5.7
# some-mysql 名字 my-secret-pw root密码 tag 标签(版本号)
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
# 不实用,原因,没有数据卷,容器被删除,数据也被删除
# 存在中文乱码问题
docker run -d -p 3306:3306 --privileged=true
-v /zzyyuse/mysql/log:/var/log/mysql
-v /zzyyuse/mysql/data:/var/lib/mysql
-v /zzyyuse/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456
--name mysql
mysql:5.7
# 解决乱码问题,在 /zzyyuse/mysql/conf 路径下 vim my.cnf
 [client]
 default_character_set=utf8
 [mysqld]
 character_set_server=utf8
 collation_server=utf8_general_ci
 # 修改完以后重启 docker
 docker restart mysql

3、docker 安装redis

docker pull redis:6.0.8
docker run -d -p 6379:6379 redis:6.0.8
mkdir -p /app/redis
# 从之前安装过的redis中拷贝一个redis.conf过来
cp /myredis/redis.conf /app/redis/   
# 允许redis外地连接,注释 # bind 127.0.0.1
#  注释 # daemonize yes 或者 修改为 daemonize no
# 开启redis数据持久化 appendonly yes
protected-mode no
docker run -p 6379:6379 --name myr3 --privileged=true
-v /app/redis/redis.conf:/etc/redis/redis.conf
-v /app/redis/data:/data
-d redis:6.0.8
redis-server /etc/redis/redis.conf
# 测试连接
docker exec -it myr3 /bin/bash
redis-cli
set k1 v1
get k1
select 15   # 15 是 databases 配置的 数字
#  通过修改databases的数量 可验证是否使用的是我们配置的redis.conf

高级篇

一、docker复杂安装

1、新建主服务器容器实例 3307

# 新建主服务器
docker run -d -p 3307:3306 --name mysql-master
-v /mydata/mysql-master/log:/var/log/mysql
-v /mydata/mysql-master/data:/var/lib/mysql
-v /mydata/mysql-master/conf:/etc/mysql
-e MYSQL_ROOT_PASSWORD=root
-d mysql:5.7
在 /mydata/mysql-master/conf 目录下 vim my.conf
[mysqld]
server_id=101 # 同一局域网中需要唯一
binlog-ignore-db=mysql  # 指定不需要同步的数据库名称
log-bin=mall-mysql-bin  # 开启二进制日志功能
binlog_cache_size=1M    # 二进制日志使用内存大小(事务)
binlog_format=mixed     # 二进制日志格式
# 二进制日志文件保存的过期时间,默认0,不自动清理
expire_logs_days=5    
#作为从库时生效,主从复制时忽略的错误,1062主键重复,1032主从数据库不一致
slave_skip_errors = 1062
#作为从库时生效,主从复制时忽略的错误
#slave_skip_errors = ddl_exist_errors
docker restart mysql-master  # 重启
docker exec -it mysql-master /bin/bash
mysql -u root -p
show databases;
# 创建数据库同步用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456' 
# 给用户授权
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%'
# 新建从服务器
docker run -d -p 3308:3306 --name mysql-slave
-v /mydata/mysql-slave/log:/var/log/mysql
-v /mydata/mysql-slave/data:/var/lib/mysql
-v /mydata/mysql-slave/conf:/etc/mysql
-e MYSQL_ROOT_PASSWORD=root
-d mysql:5.7
# 在 /mydata/mysql-slvae/conf 目录下 vim my.conf
[mysqld]
server_id=102 # 同一局域网中需要唯一
binlog-ignore-db=mysql  # 指定不需要同步的数据库名称
# 开启二进制日志功能,以备slave作为其他数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
binlog_cache_size=1M    # 二进制日志使用内存大小(事务)
binlog_format=mixed     # 二进制日志格式
# 二进制日志文件保存的过期时间,默认0,不自动清理
expire_logs_days=5    
#作为从库时生效,主从复制时忽略的错误,1062主键重复,1032主从数据库不一致
slave_skip_errors = 1062
#作为从库时生效,主从复制时忽略的错误
#slave_skip_errors = ddl_exist_errors
# relay_log 配置中继日志
relay_log=mall-mysql-relay-bin
# slave将复制事件写进自己的二进制日志
log_slave_updates=1
# slave设置为只读(具有super权限的用户除外)
read_only=1
docker restart mysql-slave  # 重启

标签:实战,容器,教程,--,redis,mysql,镜像,docker
From: https://blog.51cto.com/feng150702/6442088

相关文章

  • 面试之数据库SQL编写实战案例
    好多同学在面试的过程中会碰到关于SQL查询的相关案例,让手写SQL语句,直接蒙蔽的不少哦,下面以几个面试题为例,谈谈SQL的编写,有题有答案,大家可以看看参考一下:数据库的基本准备:/*NavicatMySQLDataTransferSourceServer:localhostSourceServerVersion:50168SourceH......
  • Postman 网页版入门教程
    使用Postman网页版详细介绍Postman是一款流行的API开发工具,可以帮助开发者优化工作流程。除了客户端,Postman还支持网页版访问,让用户能够从任何网页浏览器中访问该工具。在本篇文章中,我们将详细介绍如何使用Postman的网页版。第一步:进入Postman官网要访问Postman网页版,首先,我们需要......
  • 深度学习项目之mnist手写数字识别实战(TensorFlow框架)
    mnist手写数字识别是所有深度学习开发者的必经之路,mnist数据集的图片十分简单,是二值化图像,像素个数为28x28。所以对于所有研究深度学习的开发者来说学会mnist数据集的模型十分有必要。以此为实例进行计算机视觉如何进行识别出图片中的数据。MNIST手写数字数据集来自美国国家标准与......
  • 科研必备:LaTeX论文排版软件的简介,安装与使用教程
    现如今发论文已经成为各大高校以及研究所进行学术科研考核的。对于发表论文来说,除了idea以外,更多的是进行论文的排版,毕竟论文是要给别人看的,因此写作风格以及使用的排版软件进行排版尤为重要。LaTeX软件可以进行较快的论文格式排版,尤其是很多的高水平论文与会议的官网会发布论文的......
  • html5游戏制作入门系列教程(五)
    我们继续这一系列文章,使用HTML5的canvas组件进行游戏开发。今天,这是相当完整的游戏例子–它会回顾经典的旧电脑游戏–坦克大战。我会教你使用阵列地图并教你如何检测活动对象(坦克)与环境(基于阵列的地图)的碰撞。你可以点击这里阅读这一系列教程的前一篇文章:html5游戏制作入门系列......
  • html5游戏制作入门系列教程(二)
    今天,我们继续html5游戏制作入门系列的系列文章。今天,我们将继续基础知识(也许甚至是高级技巧的基础)。我要告诉你如何具有渐变颜色填充对象,绘制文本,使用自定义的字体绘制文本,基本的动画,以及最重要的UI元素–按钮。 我们以前的文章中,你可以在这里阅读:html5游戏制作入门系列教程(一)。......
  • html5游戏制作入门系列教程(一)
    从今天开始,我们将开始HTML5游戏开发一系列的文章。在我们的第一篇文章中,我们将讲解在画布canvas上的基础工作,创建简单的对象,填充和事件处理程序。另外,要注意在这个阶段中,我们不会立即学习WebGL相关的3D部分。但我们会尽快在未来的WebGL。 在每篇文章中,我们都将学习到一些新的东西......
  • docker安装MongoDB
    (base)rootyx@rootyx-Default-string:~$sudodockerpullmongo:4.44.4:Pullingfromlibrary/mongo99803d4b97f3:Pullcomplete6653ceb22977:Pullcompletee067c5774dde:Pullcomplete3f2512535c9b:Pullcomplete95823dd64119:Pullcomplete77aa83f4fcd4:Pull......
  • Docker(八):容器互联之自定义网络
    在Docker中每一个容器都是一个独立的个体,相互之间不能进行信息的传输。这里学习一种让容器可以相互联系的方法——自定义网络。一、创建自定义网络命令:dockernetworkcreate--driver网络模式--subnet子网地址--gateway网关网络名称测试:--driverbridge 这里是以创建的......
  • Angular6 教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介Angular6是一个JavaScript框架,用于构建JavaScript,html和TypeScript中的Web应用程序和应用程序,它是JavaScript的超集。它是Angular的一个更新版本,相当于angular的6.x版本。Angular6入门教程-从基本到高级概念的简单的步骤了解Angular6,其中包括概述,环境设置,项目设置,......