Docker基礎學習

Docker

Docker是一個開源的應用容器引擎,可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。

docker安裝(CentOS)

  • 查看CentOS系統內核版本,需要高於3.10

在這裏插入圖片描述
如果內核版本過低,可以參考此鏈接進行升級。

  • 安裝docker

    • 移除舊版本
    $ 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便於我們對數據庫進行數據導入的操作,然後將文件(相對/絕對路徑)拷貝到容器中,最後執行腳本寫入數據。

    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_agnesi

  • 啓動容器

在這裏插入圖片描述
使用docker logs命令查看日誌:
在這裏插入圖片描述

  • 驗證數據庫鏡像是否真正擁有數據

1.進入容器
在這裏插入圖片描述
2.登錄mysql,使用我們在priviledges.sql文件中的用戶名密碼
在這裏插入圖片描述
嘗試查詢數據:select * from film;
在這裏插入圖片描述
由上圖可知,我們成功插入了數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章