Docker基础学习

Docker

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

docker安装(CentOS)

  • 查看CentOS系统内核版本,须要高于3.10

在这里插入图片描述
若是内核版本太低,能够参考此连接进行升级。linux

  • 安装dockersql

    • 移除旧版本
    $ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
    • 安装必要的系统工具
    $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    • 添加软件源信息
    $ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    • 更新yum缓存
    $ sudo yum makecache fast
    • 安装Docker-ce
    $ sudo yum -y install docker-ce
    • 启动Docker后台服务
    $ sudo systemctl start docker
    • 运行hello-word
因为本地没有hello-world镜像,因此从仓库中下载该镜像并在容器中运行。![在这里插入图片描述](https://img-blog.csdnimg.cn/20181224223829426.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdXloNzM=,size_16,color_FFFFFF,t_70)
-    镜像加速
在`/etc/docker/daemon.json`文件(若是没有,自行建立)中添加:
```json
{
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}
```

docker基本操做

  • 查看镜像$ docker images
  • 查看容器$ docker ps,若是想要查看已经关闭的镜像能够加上-a参数
  • 删除镜像$ docker rmi <image-name/id>,强行删除加上-f参数
  • 删除容器$ docker rm <container-name/id>,强行删除加上-f参数
  • 构建镜像$ docker build -t <image-name> ..表示当前路径,可使用具体路径代替
  • 运行容器$ docker run -p <本机端口>:<docker容器内部端口> --name <container-name> -d <image-name>;-d参数表示在后台运行容器,并返回容器ID
  • 交互模式运行容器$ docker exec -it <container-name> /bin/bash-i以交互模式运行容器、-t为容器从新分配一个伪输入终端
  • 标记本地镜像,将其纳入某一仓库$ docker tag <image-name[:tag]> <registryhost/username/image-name[:tag]>
  • 查看docker日志$ docker logs <container-name>

docker实战(构建MySQL数据库镜像)

  • 首先,准备好数据库所需的数据(sql文件)
-- init.sql --
drop database if exists starwars;
create DATABASE starwars;
use starwars;
create table if not exists people (
    _id INT NOT NULL AUTO_INCREMENT,
    ID char(100),
    Name char(100),
    Heigth char(100),
    Mass char(100),
    Hair_color char(100),
    Skin_color char(100),
    Eye_color char(100),
    Birth_year char(100),
    Gender char(100),
    Homeworld char(100),
    Films char(200),
    Species char(200),
    Vehicles char(200),
    Starships char(200),
    primary key(_id)
); 
……
……
  • 以后,书写Dockerfile文件

以mysql5.7为基础镜像构建咱们所须要的镜像,首先设置MYSQL_ALLOW_EMPTY_PASSWORD便于咱们对数据库进行数据导入的操做,而后将文件(相对/绝对路径)拷贝到容器中,最后执行脚本写入数据。docker

FROM mysql:5.7
    # no password
    ENV MYSQL_ALLOW_EMPTY_PASSWORD yes
    
    # put the file to container
    COPY setup.sh /mysql/setup.sh
    COPY data/mysql/priviledges.sql /mysql/priviledges.sql
    COPY sql/init.sql /mysql/init.sql
    # command
    CMD ["sh", "/mysql/setup.sh"]

具体Dockerfile语法参见连接数据库

  • 编写setup.sh脚本
#!/bin/bash
set -e

#查看mysql服务的状态,方便调试,这条语句能够删除
echo `service mysql status`

echo '1.启动mysql....'
#启动mysql
service mysql start
sleep 3
echo `service mysql status`

echo '2.开始导入数据....'
#导入数据
mysql < /mysql/init.sql
echo '3.导入数据完毕....'

sleep 3
echo `service mysql status`

#从新设置mysql密码
echo '4.开始修改密码....'
mysql < /mysql/priviledges.sql
echo '5.修改密码完毕....'

#sleep 3
echo `service mysql status`
echo 'mysql容器启动完毕,且数据导入成功'

tail -f /dev/null
  • MySQL权限设置priviledges.sql
use mysql;
select host, user from user;
-- 由于mysql版本是5.7,所以新建用户为以下命令:
create user starwars identified by 'starwars';
-- 将starwars数据库的权限受权给建立的starwars用户,密码为starwars:
grant all on starwars.* to starwars@'%' identified by 'starwars' with grant option;
-- 这一条命令必定要有:
flush privileges;
  • 建立镜像

在这里插入图片描述
在这里插入图片描述
因为未使用--name参数指定容器名称,因此随机生成了一个名字brave_agnesijson

  • 启动容器

在这里插入图片描述
使用docker logs命令查看日志:
在这里插入图片描述centos

  • 验证数据库镜像是否真正拥有数据

1.进入容器
在这里插入图片描述
2.登陆mysql,使用咱们在priviledges.sql文件中的用户名密码
在这里插入图片描述
尝试查询数据:select * from film;
在这里插入图片描述
由上图可知,咱们成功插入了数据。缓存

相关文章
相关标签/搜索