centos7安裝docker 以及docker安裝redis,mysql,前後端打包映象執行
一、centos7安裝docker
1.檢視centos7版:
uname -r
2.執行
yum update
3.驗證是否安裝了docker:
docker version
4.如果安裝了請解除安裝
sudo yum remove docker docker-common container-selinux docker-selinux docker-engine
5.安裝 yum-utils,它提供了 yum-config-manager,可用來管理yum源
sudo yum install -y yum-utils
新增yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
7.更新索引
sudo yum makecache fast
8.安裝 docker-ce
sudo yum install docker-ce
9.啟動docker:
systemctl status docker
//啟動docker
systemctl start docker
//停止docker
service docker stop
//重啟docker
service docker restart
/檢視裝好的映象
docker images
//檢視容器
docker ps -a
命令 用法
yum -y install docker-ce 下載最新版的docker
service docker start 啟動Docker服務
service docker stop 停止Docker服務
service docker restart 重新啟動Docker服務
docker version 檢視Docker的版本號
docker pull 映象地址:版本 從映象倉庫中下載
docker save a2a69ca5184a > jt-centOS6.tar 根據映象id匯出映象
docker save -o redis-3.2.8.tar redis:3.2.8 根據映象名稱匯出映象
docker load -i docker-centos-6.5.tar 指定jar包匯入映象檔案
docker rmi a2a69ca5184a 根據Id號刪除映象檔案
docker rmi -f a2a69ca5184a 強制刪除映象檔案 刪除映象前需要先關閉容器
docker images 查詢所有映象檔案
docker inspect index.alauda.cn/tutum/centos:6.5 檢視映象檔案細節資訊
docker tag 舊映象名稱和埠 redis-ali:0.0.1 修改映象的名稱
例如:docker tag id號 docker.io/tomcat:7 修改映象的標籤
docker build -t 映象名稱:版本號 根據dockerfile來建立映象檔案
docker run -d --name 容器名 映象名:版本號 根據映象名稱啟動容器
docker run -d --name 容器名(自定) 映象id號 根據映象id啟動容器
docker run -d -p 虛擬機器埠:映象埠 --name 容器名 映象名:版本號 啟動容器,並指定暴露埠
docker cp ROOT.war tomcat8:/usr/local/tomcat/webapps/ 拷貝檔案到tomcat8的容器的路徑中
例如:docker run -d -p 8093:8080 --name tomcat03 tomcat:7.0
引數說明:
-d,則containter將會執行在後臺模式(Detached mode)
--name 例項名稱
-p 對外程式訪問埠8093,宿主機對映的tomcat埠8080
最後的tomcat為映象的名稱
訪問過程
docker ps 檢視活動的docker容器程序
Docker ps -a/-all 檢視全部的容器
docker exec -it 容器id bash 進入指定的容器
docker stop 容器Id號 停止指定容器
docker start 容器Id號 啟動建立好的容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq) 關閉和刪除所有的容器
docker rm 容器Id 刪除指定的容器
啟動mysql:
docker run --name=mysql-5.7 -it -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 --character-set-server=utf8
解除安裝docker
解除安裝
1.查詢安裝過的包
yum list installed | grep docker
docker-engine.x86_64 17.03.0.ce-1.el7.centos @dockerrepo
2.刪除安裝的軟體包
yum -y remove docker-engine.x86_64
3.刪除映象/容器等
rm -rf /var/lib/docker
Docker安裝CentOS7及MySQL5.7
dockerfile
#新增contos7檔案
FROM contos:7
#新增JDK1.8 centos+jdk
ADD jdk-8u51-linux-x64.tar.gz /usr/local/src
ENV JAVA_HOME=/usr/local/src/jdk1.8.0_51
ENV PATH=$JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#centOS7+JDK1.8+tomcat7
ADD apache-tomcat-7.0.55.tar.gz /usr/local/src
ENV CATALINA_HOME /usr/local/src/apache-tomcat-7.0.55
ENV PATH=$PATH:$CATALINA_HOME/bin
#新增ROOT.war包檔案
COPY ROOT.war $CATALINA_HOME/webapps/ROOT/ROOT.war
WORKDIR $CATALINA_HOME/webapps/ROOT
RUN jar xvf ROOT.war
RUN rm ROOT.war
#對外暴露的埠號
EXPOSE 8080
CMD ["/usr/local/src/apache-tomcat-7.0.55/bin/catalina.sh","run"]
新增阿里映象地址
1.
sudo mkdir -p /etc/docker
2.
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xsvqbt2w.mirror.aliyuncs.com"]
}
EOF
3.
sudo systemctl daemon-reload
4.
sudo systemctl restart docker
docker pull redis:latest
二、Docker 安裝 Redis
1、取最新版的 Redis 映象
這裡我們拉取官方的最新版本的映象:
$ docker pull redis:latest
2、檢視本地映象
使用以下命令來檢視是否已安裝了 redis:
$ docker images
在上圖中可以看到我們已經安裝了最新版本(latest)的 redis 映象。
3、執行容器
安裝完成後,我們可以使用以下命令來執行 redis 容器:
$ docker run -itd --name redis-test -p 6379:6379 redis
引數說明:
-
-p 6379:6379:對映容器服務的 6379 埠到宿主機的 6379 埠。外部可以直接通過宿主機ip:6379 訪問到 Redis 的服務。
4、安裝成功
最後我們可以通過 docker ps 命令檢視容器的執行資訊:
接著我們通過 redis-cli 連線測試使用 redis 服務。
5、外部訪問
執行容器
docker run -itd --name redis-test -p 6379:6379 redis
①建立配置檔案目錄存放redis.conf,檔案從
②建立資料夾,新建配置檔案貼入從官網下載的配置檔案並修改
mkdir /usr/local/docker
vi /usr/local/docker/redis.conf
③修改啟動預設配置(從上至下依次):
bind 127.0.0.1 #註釋掉這部分,這是限制redis只能本地訪問
protected-mode no #預設yes,開啟保護模式,限制為本地訪問
daemonize no#預設no,改為yes意為以守護程序方式啟動,可後臺執行,除非kill程序,改為yes會使配置檔案方式啟動redis失敗
requirepass 123456 #配置訪問密碼
databases 16 #資料庫個數(可選),我修改了這個只是檢視是否生效。。
dir ./ #輸入本地redis資料庫存放資料夾(可選)
appendonly yes #redis持久化(可選)
4.docker啟動redis命令
docker run -p 6379:6379 --name myredis -v /usr/local/docker/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
命令解釋說明:
-p 6379:6379 埠對映:前表示主機部分,:後表示容器部分。
--name myredis 指定該容器名稱,檢視和進行操作都比較方便。
-v 掛載目錄,規則與埠對映相同。
為什麼需要掛載目錄:個人認為docker是個沙箱隔離級別的容器,這個是它的特點及安全機制,不能隨便訪問外部(主機)資源目錄,所以需要這個掛載目錄機制。
-d redis 表示後臺啟動redis
redis-server /etc/redis/redis.conf 以配置檔案啟動redis,載入容器內的conf檔案,最終找到的是掛載的目錄/usr/local/docker/redis.conf
--appendonly yes 開啟redis 持久化
5.檢視是否執行成功
docker ps 檢視執行的容器
dockers logs myredis/27ddba64faa6 (容器名稱/id)
6、用客戶端連線
在服務端用redis-cli設定一個key
客戶端可以獲取key的值了
三、Docker安裝MySQL
3.1、下載
下載映象
$ docker pull mysql:5.7
將全部的配置檔案和關聯的資料夾統一放到/opt/docker-mysql
中
3.2、配置檔案
$ mkdir -p /opt/docker-mysql/conf.d
增加並修改配置檔案config-file.cnf
內容如下,設定表名不區分大小寫; linux下預設是區分的,windows下預設不區分
[mysqld]
# 表名不區分大小寫
lower_case_table_names=1
#server-id=1
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysqlx.sock
#symbolic-links=0
# sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
3.3、啟動
增加資料資料夾
$ mkdir -p /opt/docker-mysql/var/lib/mysql
啟動,設定預設密碼 123456
$ docker run --name mysql \
--restart=always \
-p 3306:3306 \
-v /opt/docker-mysql/conf.d:/etc/mysql/conf.d \
-v /opt/docker-mysql/var/lib/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456-abc \
-d mysql:5.7
3.4、 常用命令
進入容器
$ docker exec -it mysql bash
檢視日誌
$ docker logs -f mysql
備份資料
$ docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"123456-abc"' > /some/path/on/your/host/all-databases.sql
恢復資料
$ docker exec -i mysql sh -c 'exec mysql -uroot -p"123456-abc"' < /some/path/on/your/host/all-databases.sql
3.5、 其他問題
only_full_group_by 問題
如果安裝的版本是 5.7
版本, 查詢資料時出現如下錯誤
this is incompatible with sql_mode=only_full_group_by
可以使用使用下列方式解決
1. 查詢 sql_mode
select @@sql_mode
結果如下
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2. 重置
刪除其中的 ONLY_FULL_GROUP_BY
配置,重新設定到 config-file.cnf
中
[mysqld]
# 表名不區分大小寫
lower_case_table_names=1
#server-id=1
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysqlx.sock
#symbolic-links=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
3. 重啟容器
$ docker restart mysql
參考地址 https://www.jianshu.com/p/d6febf6f95e0
四、springboot 執行在docker
1、把springboot打成可執行的jar包
pom.xml檔案加入下面的依賴
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2、把 jar 包上傳到 伺服器確定目錄下
3、編寫dockerfile 檔案放到jar檔案同級目錄下
FROM registry.cn-shanghai.aliyuncs.com/choerodon-tools/javabase:0.8.2
COPY app.jar /ladp-server-svc.jar
CMD java $JAVA_OPTS $SKYWALKING_OPTS -jar /ladp-server-svc.jar
4、通過 dockerfile 檔案生成本工程的映象:
`-t :給映象取名為 bookapp
docker build -t bookapp .
此行命令最後有一個點,表示使用當前上下文中的 dockerfile 檔案 。
docker images 檢視原有映象 ,並構建新映象:bookapp:
從第 2 次檢視映象可以確認,新的映象bookapp 已構建成功。
5、通過映象啟動容器,命令如下:
# -d 後臺執行、
# 最後一個 bookapp 是引用的映象的名字、
# --name bookapp 給容器取名為 bookapp (取名引數前面是兩短橫線)、
# -p 8030:8030 埠對映,注意是小寫 p
# 前一個 8030 是對外瀏覽器上訪問的埠,後一個 8030 是容器內工程本身的埠,兩者可不一樣
docker run -d -p 8030:8030 --name book-service book-service
docker run -d -p 8036:8030 --name book-service2 book-service
docker run -d -p 8034:8030 --name bookstock-service bookstock-service
docker ps -a :檢視當前伺服器上所有容器
docker logs fcd396c4becb :檢視容器的日誌
開啟瀏覽器訪問介面文件,容器正常工作
五、VUE工程部署在Docker
5.1、VUE應用編譯打包
npm run-script build
此時工程根目錄下多出一個 dist 資料夾,如果將該 dist 目錄整個傳到伺服器上,部署成靜態資源站點就能直接訪問到該專案。
5.2、構建 Vue 應用映象
Nginx 是一個高效能的 HTTP 和反向代理伺服器,此處我們選用 Nginx 映象作為基礎來構建我們的vue應用映象。
獲取 Nginx 映象
docker pull nginx
- Docker映象(Image)一個特殊的檔案系統。Docker 映象是一個特殊的檔案系統,除了提供容器執行時所需的程式、庫、資源、配置等檔案外,還包含了一些為執行時準備的一些配置引數(如匿名卷、環境變數、使用者等)。 映象不包含任何動態資料,其內容在構建之後也不會被改變。
- Docker 映象相關操作有:搜尋映象,docker search [REPOSITORY[:TAG]];拉取映象,docker pull [REPOSITORY[:TAG]];檢視映象列表,docker image ls;刪除映象,docker image rm [REPOSITORY[:TAG]] / docker rmi [REPOSITORY[:TAG]] 等等。
- Docker 映象名稱由 REPOSITORY 和 TAG 組成 [REPOSITORY[:TAG]],TAG預設為 latest。
建立 Nginx Config配置檔案
在專案根目錄下建立 Nginx 資料夾,該資料夾下新建檔案 default.conf:
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/host.access.log main;
error_log /var/log/nginx/error.log error;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
該配置檔案定義了首頁的指向為 /usr/share/nginx/html/index.html,所以我們可以一會把構建出來的 index.html 檔案和相關的靜態資源放到 /usr/share/nginx/html 目錄下。
建立 Dockerfile 檔案
FROM nginx
COPY dist/ /usr/share/nginx/html/
COPY nginx/default.conf /etc/nginx/conf.d/default.conf
- 自定義構建映象的時候基於 Dockerfile 來構建。
- FROM nginx 命令的意思該映象是基於 nginx:latest 映象而構建的。
- COPY dist/ /usr/share/nginx/html/ 命令的意思是將專案根目錄下 dist 資料夾下的所有檔案複製到映象中 /usr/share/nginx/html/ 目錄下。
- COPY nginx/default.conf /etc/nginx/conf.d/default.conf 命令的意思是將 Nginx 目錄下的 default.conf 複製到 etc/nginx/conf.d/default.conf,用本地的 default.conf 配置來替換 Nginx 映象裡的預設配置。
基於該 Dockerfile 構建 Vue 應用映象
執行命令(注意不要少了最後的 “.” ):
docker build -t vuebook .
-t 是給映象命名,. 是基於當前目錄的 Dockerfile 來構建映象。
docker images #檢視映象
啟動 Vue app 容器
Docker 容器Container: 映象執行時的實體。映象(Image)和容器(Container)的關係,就像是面向物件程式設計中的類和例項一樣,映象是靜態的定義,容器是映象執行時的實體。容器可以被建立、啟動、停止、刪除、暫停等 。
基於 vuebook 映象啟動容器,執行命令:
docker run \
-p 8088:8088 \
-d --name vuebook \
vuebook
- docker run 基於映象啟動一個容器
- -p 8080:8088 埠對映,將宿主的8080埠對映到容器的8088埠
- -d 後臺方式執行
- --name 容器名,檢視 Docker 程序
docker ps
訪問 http://192.168.7.33:8088 可以看到首頁
登入後進入主頁
1、新增圖書
圖書已新增
2、刪除圖書
3、編輯圖書
4、查詢圖書