Docker容器在linux使用Mysql 8数据库配置

常用命令

  • docker images 查看本地镜像 初始是空的
  • docker pull 镜像的名字  下载拉去镜像的名字
  • docker rmi 镜像编号(image id)/镜像名字  删除指定镜像
  • docker ps  查看正在运行的容器:  相当于linux下的 ll  或者 ls
  • docker ps -a 查看所有的容器(包括运行和关闭的)
  • docker run -id --name=bufanli centos:7 常见一个长期运行的容器(守护式容器)
  • docker exec -it container_name   /bin/bash (或者 container_id)  (守护式容器的登录方式 exit退出时,容器不会停止)
  • docker stop id或name 停止正在运行的容器(守护式容器)
  • docker start  id或name 启动已运行过的容器   
  • docker restart id或name 重启容器
  • docker inspect name   查看容器内部的ip地址 
  • docker rmi id或name  删除镜像  

使用exit命令 退出当前容器

l 启动docker:systemctl start docker

l 停止docker:systemctl stop docker

l 重启docker:systemctl restart docker

l 查看docker状态:systemctl status docker

l 开机启动:systemctl enable docker

容器技术是虚拟化的一种,容器也称之为虚拟系统,它一般虚拟的是操作系统软件。

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

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

安装

将Docker安装到CentOS上。注意:这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。

使用yum命令在线安装 :中间有一个停顿 输入y即可

centos7中:
yum install docker
yum -y install docker-io



安装成功后查看版本号:
docker -v

systemctl命令是系统服务管理器指令,它是 service 和 chkconfig 两个命令组合。

l 启动docker:systemctl start docker

l 停止docker:systemctl stop docker

l 重启docker:systemctl restart docker

l 查看docker状态:systemctl status docker

l 开机启动:systemctl enable docker

l 查看docker服务的概要信息:docker info

可以用来测试服务是否启动了

l 查看docker命令的帮助文档:docker --help

Image镜像操作

Docker容器启动是需要的一些文件,而这些文件就可以称为Docker镜像。

注册中心

Docker 用 Registry 来保存用户构建的镜像。Registry 分为公共和私有两种。Docker 公司运营公共的Registry 叫做 Docker Hub(下载镜像的位置)。用户可以在 Docker Hub 注册账号,分享并保存自己的镜像

常用操作

  • docker images 查看本地镜像 初始是空的
  • docker search 镜像名称  搜索本地镜像
  • https://hub.docker.com/官网上可以显示细节
  • docker的语义化版本:

    docker支持x.y.z的版本方式,能自动识别。

    比如拉取镜像操作:根据需要具体选一般用第一个

    mysql:8.0.12----->下载的就是8.0.12
    mysql:8.0  ------->下载8.0.最高版本 的版本
    mysql:7    ------->下载7系列最高的版本
    mysql:6    ------->下载6系列最高的版本...
    mysql:latest   ------->下载最高的版本,省略版本号时就是latest
    mysql   ------->下载最高的版本,省略版本号时就是latest
  • 下载(拉取)镜像

    docker pull 镜像的名字

       比如下载centos的7的版本,不加版本号会下载lastest版本。     

       docker pull centos:7   这个大小大概200兆大小

查看本地镜像列表,已经存在。

删除本地镜像

docker rmi 镜像编号(image id)/镜像名字:版本标记:删除指定镜像 通过docker images 命令查询要删除的镜像  
docker rmi `docker images -q`:删除所有镜像

Container容器操作(核心)

Docker 可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是 Docker 生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。 容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。

Docker 借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker 将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而 Docker 运输软件。

和集装箱一样,Docker 在执行上述操作时,并不关心容器中到底装了什么,它不管是web 服务器,还是数据库,或者是应用程序服务器什么的。所有的容器都按照相同的方式将内容“装载”进去。

Docker 也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到Registry,然后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。

像标准集装箱一样,Docker 容器方便替换,可以叠加,易于分发,并且尽量通用。使用 Docker,我们可以快速的构建一个应用程序服务器、一个消息总线、一套实用工具、一个持续集成(CI)测试环境或者任意一种应用程序、服务或工具。我们可以在本地构建一个完整的测试环境,也可以为生产或开发快速复制一套复杂的应用程序栈。

容器查看

查看正在运行的容器:  docker ps  相当于linux下的 ll  或者 ls

查看所有的容器(包括运行和关闭的) docker ps -a

查看最后一次运行的容器信息  docker ps -l

查看停止了的容器列表  docker ps -f status=exited

创建与启动容器

交互式容器(退出命令行容器会关闭)

创建一个交互式容器并取名为mycentos run 既创建又启动

docker run -it --name=mycentos centos:7 /bin/bash  

自动进入到容器中的系统了:

提示:

1)如果镜像centos:7本地没有下载,自动会到注册中心寻找,并自动下载。

2)镜像的名字如果是官方的前缀名称空间docker.io,则可以省略名称空间,如:docker.io/centos可以省略为centos

3)/bin/bash相当于windows下的cmd,即容器启动后,自动进入到容器的命令行了。

使用exit命令 退出当前容器

[root@67f131336022 /]# exit
exit
[root@aaaa-docker docker]# 

然后用ps -a 命令查看发现该容器也随之停止: docker ps -a

守护式容器(一般用这个)

创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(容器名称不能重复):

docker run -id --name=bufanli centos:7

使用  docker ps -a 查询容器是否运行

登录守护式容器方式:

docker exec -it container_name (或者 container_id)  (exit退出时,容器不会停止)

方式1:使用名字进入
方式1:使用名字进入
[root@docker docker]# docker exec -it bushaungli /bin/bash 
[root@2c32a5cb4a71 /]# 
方式2:使用id进入
[root@ docker]# docker exec -it 2c32a5cb4a71 /bin/bash
[root@2c32a5cb4a71 /]#  

停止与启动容器

停止正在运行的容器(守护式容器):  docker stop $CONTAINER_NAME/ID  例如 docker stop mycentos (name)

启动已运行过的容器   docker start $CONTAINER_NAME/ID  例如 docker start mycentos

重启容器: docker restart $CONTAINER_NAME/ID

文件拷贝

如果我们需要将文件拷贝到容器内可以使用cp命令

docker cp 需要拷贝的文件或目录 容器名称:容器目录

docker cp test.txt mycentos2:/

进入到容器中,可以查看到刚拷贝的文件。 也可以将文件从容器内拷贝出来

docker cp 容器名称:容器目录 需要拷贝的文件或目录

如:拷贝文件,从容器到宿主机器的home目录:

#先退出容器 exit

docker cp mycentos2:/test.txt

目录(映射)挂载(文件夹的共享,一个更改另一个也更改,一个增加另一个也增加,相当于数据的共享)

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。

创建容器时额外添加-v参数 后边为宿主机目录:容器目录

如: docker run -id -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos centos:7
详细例子操作: 
cd usr/local/
mkdir myhtml
vi index.html
#创建一个守护容器,并映射目录
[root@pxxx-docker myhtml]# docker run -id -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos centos:7
f5e14abc34724e64c13ab51d8943fa6283c1635fce44d94a835fb68c68cc350a
#进入容器
[root@pxxx-docker myhtml]# docker exec -it mycentos /bin/bash
[root@f5e14abc3472 /]# 

如果你共享的是多级的目录,可能会出现权限不足的提示。

这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题

业务场景:

比如部署数据库或者网站,可以将数据库的数据文件或者网站的网页放到宿主机器上,容器只是映射读取。容易做成集群,没有数据同步的困扰。

查看容器内部IP地址

我们可以通过以下命令查看容器运行的各种数据

docker inspect mycentos

在信息中找"IPAddress": "172.17.0.3",

也可以直接执行下面的命令直接输出IP地址(格式过滤)

docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos

例如

[root@xxx-docker myhtml]# docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos
172.17.0.3

删除容器

l 删除指定的容器:  注意,只能删除停止的容器

docker rm $CONTAINER_ID/NAME
例如
#强制删除:小心使用。
[root@xxx-docker aa]# docker rm mycentos
Error response from daemon: You cannot remove a running container 3c04f7d6dd62264137d9cebdb9401c459dca2b7488204a0b6247a9ac158daa57. Stop the container before attempting removal or use -f
[root@xxx-docker aa]# docker rm -f mycentos
mycentos31
[root@xxx-docker aa]# 

#先停止再删除
[root@xxx-docker myhtml]# docker rm mycentos
Error response from daemon: You cannot remove a running container 2c32a5cb4a719c6614cab58561ab6e7ebf35cf7067271a2d61112c0c69d0be2f. Stop the container before attempting removal or use -f
[root@xxx-docker myhtml]# docker stop mycentos
mycentos2
[root@xxx-docker myhtml]# docker rm mycentos

删除所有容器

docker rm `docker ps -a -q`

MySQL部署

拉取MySQL镜像

docker pull mysql:5.7.23
或
docker pull mysql:8
或
docker pull mysql

查看镜像

\

创建MySQL容器并映射端口和改密码

docker run -di --name=my_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

-p 代表端口映射,格式为 宿主机映射端口:容器运行端口 向外映射端口  通过linux访问

-e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码

参考过程:

[root@xxx-docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    7                   5182e96772bf        7 hours ago         200 MB

docker.io/mysql     latest              5fac85ee2c68        9 months ago        408.2 MB

[root@xxx-docker ~]# docker run -id --name=my_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
9431c8724f0f6f439d6d98e630cd57567a57bbac6c4c53199f7ee7c6be426658

进入MySQL容器,登陆MySQL

docker exec -it suyun_mysql /bin/bash 进入mysql容器
mysql -u root -p 登录

MySQL8的默认的密码加密策略发生了变化,之前的一些客户端的软件会出现无法登录的 情况。

解决:

使用mysql原生的命令进去,使用之前的密码加密策略重新修改密码:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
#本地登录(如果用原生的命令行的话,不用改)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
#远程登录
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
#然后修改root权限
use mysql;
#在 mysql 数据库的 user 表中查看当前 root 用户的相关信息
select host, user, authentication_string, plugin from user; 
#授权 root 用户的所有权限并设置远程访问
GRANT ALL ON *.* TO 'root'@'%';
#刷新权限列表
flush privileges;
#然后exit;退出
exit;
#再退出到宿主容器查看mysql的映射端口
firewall-cmd --zone=public --list-ports
#将mysql端口的防火墙打开  xxxxx  端口  
firewall-cmd --zone=public --add-port=3363/tcp --permanent
#重新载入
firewall-cmd --reload

阿里云服务器的话需要配置规则

查看容器内部IP地址

将来要使用容器的时候,需要在外面宿主机器上去映射容器内部ip,就必须知道容器的ip是多少。

我们可以通过以下命令查看容器运行的各种数据


docker inspect dockerName     

远程登陆MySQL

可视化下载地址

链接:https://pan.baidu.com/s/1A4aioOB8jletqOeQcJXfVQ 密码:q9uq   内置破解工具!!!启动后双击修改时间就好

(1)我们在我们本机的电脑上去连接虚拟机Centos中的Docker容器,这里192.168.247.130是虚拟机操作系统的IP

tomcat部署

拉取tomcat镜像

docker pull tomcat:8.5-jre8
docker run -id --name=bsl_tomcat -p xxxx:8080 -v /usr/local/myhtml:/usr/local/tomcat/webapps --privileged=true tomcat:8.5-jre8

Redis部署

拉取Redis镜像

docker pull redis:4

创建容器

 docker run -di --name=bsl_redis -p xxxx:6379 redis:4


开启服务器防火墙对应的端口参考上面mysql 在阿里云配置规则 上面也有图

客户端测试

可视化工具下载

链接:https://pan.baidu.com/s/1c_gZKfBoMsByw-W_GZnW3g 密码:03hm

备份与迁移

场景:

如果在测试环境下,你配置好的一个镜像,需要放到正式环境下运行、或者要备份一份,回头再用、或者要做集群,弄多份一模一样的容器。需要将容器打包备份为自己的镜像。

容器保存为镜像

我们可以通过以下命令将容器保存为镜像

docker commit my_tomcat  cn/tomcat:1.2
或
docker commit my_tomcat mytomcat
​
​
或指定版本
docker commit my_tomcat tomcat:1.1
docker commit my_tomcat com/tomcat:1.2

tomcat是容器名称

mytomcatcn/tomcat:1.2是新的镜像名称

此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器

镜像备份

docker save -o tomcat1.2.tar cn/tomcat:1.2
或
docker save -o tomcat.tar mytomcat

例如:在当前目录中将某镜像打包成文件。

#  docker save -o tomcat1.2.tar cn/tomcat:1.2
# ll
总用量 466400
-rw-------. 1 root root      1244 9月   3 2017 anaconda-ks.cfg
-rw-------. 1 root root 477583872 8月   7 12:30 tomcat.tar
-rw-r--r--. 1 root root         8 8月   7 10:42 test.txt

-o 输出到的文件

执行后,运行ls命令即可看到打成的tar包

6.3镜像恢复

如何导入到docker中?

首先我们先删除掉cn/tomcat:1.2镜像

然后执行此命令进行恢复

docker load -i tomcat1.2.tar

-i 输入的文件

执行后再次查看镜像,可以看到镜像已经恢复

猜你喜欢

转载自blog.csdn.net/adminBfl/article/details/82766364