docker基础篇

docker基础篇——docker安装+基础命令+实战安装MySQL,Redis的docker镜像

在centos上安装docker
#安装前置步骤,确保有gcc环境
sudo yum -y install gcc
sudo yum -y install gcc-c++
#自己安装
#进入docker官网https://docs.docker.com/engine/install/centos/ 找到 【Docker Engine】->【install】->【centos】,

#也可以直接参照下面安装
#卸载docker
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                  
#设置镜像仓库(国内小伙伴注意将官方镜像仓库地址换位阿里云的 https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo)
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

#安装docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

#如何启动,停止,重启 请查看帮助命令

#配置阿里云镜像加速器(登录阿里云,找到【容器镜像服务】->【镜像加速器】)
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker
1 帮助命令:
#启动docker
systemctl start docker
#停止docker
systemctl stopdocker
#重起docker
systemctl restart docker
#查看docker状态
systemctl status docker
#开机启动
systemct lenable docker
#查看docker概要信息
docker info
#查看docker总体帮助文档
docker --help
#查看docker命令帮助文档
docker 具体命令 --help
2 镜像命令:

镜像是创建容器的模板

docker images
docker search 镜像名称  docker search --limit 5 镜像名称
docker pull 镜像名称:tag(版本号)
#查看docker 镜像/容器所用空间
docker system df
#删除镜像
docker rmi 9c7a54a9a43c
docker rmi -f  9c7a54a9a43c(强制删除)
docker rmi -f  9c7a54a9a43c 镜像2id 镜像3id(删除多个)
docker rmi -f $(docker images -aq) (全部删除)
docker虚悬镜像:仓库名和标签名都是none
3 容器命令:

容器(每个容器都可以看做一个简易版的Linux环境)

#新建+启动容器
docker run [option] image [command] [args]
[option]:
--name = '' 为容器指定新名词
-d 后台运行容器,并返回容器id
-i 以交互模式运行容器 通常与-t一起使用
-t 为容器分配一个伪输入终端,通常与-i一起使用
-P 随机端口映射 
-p 指定端口映射 hostport:containerport

docker run -it ubuntu /bin/bash
docker run -it --name=yiubuntu  ubuntu /bin/bash

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

#退出容器
停止容器 exit
不停止容器 Ctrl+p+q

#重启容器
docker restar 容器id或名称
#停止容器
docker stop 容器id或名称
#强制停止容器
docker kill 容器ID和名称
#删除已停止的容器
docker rm yiubuntu
docker rm -f $(docker ps -a -q) 
#重要
#启动守护式容器
docker run -d ubuntu #这样立马开启就会结束,因为Ubuntu需要一个前台进程交互
docker run -d redis #这样回你成功开启Redis,因为Redis可以不需要一个前台进程交互

#查看容器日志
docker logs f32f7d462454 #f32f7d462454镜像ID
#查看容器内进程(每个容器都可以看做一个简易版的Linux环境)
docker top f32f7d462454
#查看容器内部细节
docker inspect f32f7d462454
#进入正在运行的容器进行命令行交互
docker exec -it f32f7d462454 /bin/bash #创建一个新进程,使用exit退出容器不会停止容器运行
(不常用)docker attach f32f7d462454 #不会创建一个新进程,使用exit退出容器会停止容器运行
#从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
docker cp 6bed3786f80b:/home/yi.txt /home

#导入和导出容器
#导出
docker export 6bed3786f80b >/home/123.tar (把容器导出)
#导入
cat 123.tar|docker import - yizi/ubuntu:3.7

总结:

docker镜像是什么:

​ docker镜像每层都是只读的,容器是可写的

​ 当容器启动时,一个新的可写层被加载到镜像的顶部

​ 这一层通常被称作“容器层”,“容器层”之下都叫镜像层

为了方便迁移,复用

在这里插入图片描述

4 提交容器成为镜像操作:
#以下面方式运行容器会连接主机网络
docker run --network host --name yiubuntu -it ubuntu /bin/bash
#提交容器使之成为一个新的镜像
docker commit -m="提交信息" -a = "作者" 要创建的镜像名称:[标签名]

```bash
docker commit -m="dw official site by yigao" -a="yigao" cdc9444d6b73 ghost_yi:1.0.0

#例子:在原始docker的ubuntu容器内增加一个vim功能,然后提交镜像,再依据提交的扩展镜像创建一个容器。


![在这里插入图片描述](https://img-blog.csdnimg.cn/98f71dcdbb4548848cd30205c8a9ef65.png#pic_center)

#### 5 发布镜像到阿里云:

```bash
#发布自己的本地镜像到阿里云镜像仓库(自己去阿里云https://www.aliyun.com/,支付宝登录,开通一个容器镜像仓库 https://cr.console.aliyun.com/cn-hangzhou/ 创建命名空间和公开仓库,再开始如下操作)
登录
$ docker login --username=aliyun4635923985 registry.cn-hangzhou.aliyuncs.com
#将镜像推送到Registry
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/yigao/yiubuntu5.19:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/yigao/yiubuntu5.19:[镜像版本号]

从Registry中拉取镜像
$ docker pull registry.cn-hangzhou.aliyuncs.com/yigao/yiubuntu5.19:[镜像版本号]
6 推送到私有仓库
#搭建本地私有仓库
1.下载docker registry
docker pull registry

2.运行私有库registry,相当于本地的docker hub 
docker run -d -p5000:5000 -v /yigaouse/myregistry/:/tmp/registry --privileged=true registry
#端口映射 -phost端口:docker端口
#仓库地址 默认容器内部:var/lib/registry 自定义:/yigaouse/myregistry

3.案例演示:创建一个新镜像,(Ubuntu安装ifconfig命令)
(1)运行容器Ubuntu
docker run -it ubuntu /bin/bash
(2)安装ifconfig
	apt-get update #更新Ubuntu上的安装工具apt
	apt-get install net-tools #安装ifconfig
(3)提交容器为镜像(此时不要关闭容器)
docker commit -m="" -a="" 容器id 镜像名:版本 
	
4.curl验证私服上有什么镜像 (Linux中curl发送请求)
[root@localhost /]# curl XGET http://192.168.220.129:5000/v2/_catalog
curl: (6) Could not resolve host: XGET; Unknown error
{"repositories":[]}
[root@localhost /]#

5.将新的镜像【】修改符合私服规范的tag
docker tag yiziubuntu:5.21 192.168.220.129/yiziubuntu:5.21

6.push推送到私服库
(1)私服默认不支持http推送,需要修改配置文件
	vim /etc/docker/daemon.json
	在文件内加入 "insecure-registries":["192.168.220.129:5000"]
	#注意加入该配置是允许这个连接是安全的,同时要确保这个配置和上个配置之间用 逗号 隔开
	#注意加入该配置是允许这个连接是安全的,同时要确保这个配置和上个配置之间用 逗号 隔开
	#注意加入该配置是允许这个连接是安全的,同时要确保这个配置和上个配置之间用 逗号 隔开
(2)重启docker服务和运行registry容器
systemctl restart docker
docker run -d -p5000:5000 -v /yigaouse/myregistry/:/tmp/registry --privileged=true registry
(3)推送镜像
docker push 192.168.220.129:5000/yiziubuntu:5.21
7.再次使用curl验证私服上有什么镜像
[root@localhost /]# curl XGET http://192.168.220.129:5000/v2/_catalog
curl: (6) Could not resolve host: XGET; Unknown error
{"repositories":["yiziubuntu"]}
[root@localhost /]# 
8.pull 私服库中的yiziubuntu到本地运行(拉去前可以删除本地复制的镜像)
#删除
docker rmi -f 192.168.220.129:5000/yiziubuntu:5.21
#拉取
docker pull 192.168.220.129:5000/yiziubuntu:5.21

7 docker容器数据卷:
1 数据卷 坑:挂载容器卷时记得加入

在这里插入图片描述

开启这个权限后,容器内的root才真正拥有全部的root权限,否则root仅是一个普通用户

2 数据卷 是什么:容器内部数据映射,备份到宿主机

在这里插入图片描述

docker run -it --privileged=true -v 宿主机路径:容器内部路径 镜像

在这里插入图片描述

3 数据卷 能干嘛:

在这里插入图片描述

4 数据卷案例:
#1.宿主机和容器之间添加容器卷
docker run -it --privileged=true -v 宿主机绝对路径:容器内部路径 镜像名
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu
#查看数据卷是否挂载成功
docker inspect 容器id
#进入后查看Mounts(挂载)

#2.读写规则映射添加说明
(1)读写(默认)
(2)只读:容器实例内部限制,容器只能读取不能写 read only
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data:ro --name=u1 ubuntu
(3)
#3.卷的继承和共享
(1)容器卷运行容器
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u2 ubuntu
(2)容器卷继承
#docker run -it --privileged=true --volumes-from 父类 --name=u3 ubuntu
docker run -it --privileged=true --volumes-from u2 --name=u3 ubuntu

8 docker常规软件的安装:

注意:查看下面 【总体步骤】,如存在不熟悉的操作命令不建议继续往下看。

1 总体步骤
#1.搜索镜像
#2.拉取镜像
#3.查看镜像
#4.启动镜像 (服务端口映射,数据卷映射等)
#5.停止容器
#6.移除容器
2 安装tomcat
docker search tomcat
docker pull tomcat
docker images tomcat
docker run -d -p8080:8080 --name tomcat1 tomcat
#注意安装后需要修改文件夹webapps.dist 为webapps,否则tomcat首页访问是404(最新版的问题)
可以安装老一点的版本,就没有上述问题
docker run -d -p8080:8080 --name tomcat8 billygoo/tomcat8-jdk8

3 安装MySQL
docker pull mysql:5.7
#运行MySQL5.7,请去docker hub查看关于MySQL5.7镜像的启动
1.简单使用
docker run -p3306:3306 -e MYSQL_ROOT_PASSWORD=283532 -d mysql:5.7
docker exec -it 8734dd4d032f /bin/bash
#使用MySQL5.7
mysql -uroot -p

#简单使用存在的两个问题
1.插入汉字出错(中文乱码)docker 默认字符集编码
insert into t1 values(3,'椅子')
> 1366 - Incorrect string value: '\xE9\xAB\x98\xE7\xBF\xBC' for column 'name' at row 1
1.查看编码
mysql> show variables like "%character%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

mysql> 
2.当容器被删除时,数据也随之被删除,祭了,润了,跑路了?

2.实战使用:
解决上述两个问题:
(1)正确成功插入中文数据
(2)容器删除后,如何处理MySQL中的数据
使用步骤:
1.新建MySQL容器实例(使用数据卷映射数据)
docker run -d -p3306:3306 --privileged=true -v /yigaouse/mydql/log:/var/log/mysql -v /yigaouse/mydql/data:/var/lib/mysql -v /yigaouse/mydql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=283532 --name mysql mysql:5.7

docker run -d -p3306:3306 --privileged=true
-v /yigaouse/mydql/log:/var/log/mysql
-v /yigaouse/mydql/data:/var/lib/mysql
-v /yigaouse/mydql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=283532
--name mysql
mysql:5.7

2.新建my.cnf
cd /yigaosue/mydql/conf
vim my.cnf
在文件内输入(这是解决中文乱码,插入失败的问题)
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
保存退出
3.重启MySQL容器实例再重新进入并查看字符集编码
docker restart 1d585fba007e
mysql -uroot -p
show variables like "%character%"
    -> ;
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.02 sec)
#看到如此字符集编码则可以正常插入汉字数据

4.插入中文测试
测试成功,问题1 已解决

5.删除mysql容器,尝试解决问题2
docker rm -f 1d585fba007e #1d585fba007e 容器id
再次运行mysql:5.7镜像
docker run -d -p3306:3306 --privileged=true -v /yigaouse/mydql/log:/var/log/mysql -v /yigaouse/mydql/data:/var/lib/mysql -v /yigaouse/mydql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=283532 --name mysql mysql:5.7
进入容器交互
docker exec -it mysql /bin/bash
登录MySQL
mysql -uroot -p
查询数据
use db01
select * from t1;
此时发现数据都在,则表示问题2 已解决



4 安装redis
直接实战使用:
1.宿主机下新建文件夹
mkdir -p /app/redis
2.将一个redis.conf文件模板拷贝到/app/redis下
自己找一个原始redis.conf文件拷贝到/app/redis下
cp redis.conf所在的文件路径 /app/redis
3.在/app/redis下修改redis.conf文件
#127.0.0.1::1
daemonize no
protected-mode no
4.使用redis镜像创建容器
docker run -p6379:6379 --name myredis --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis redis-server /etc/redis/redis.conf
5.使用redis-cli(redis客户端)连接
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值