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爲鏡像的名稱
訪問過程

img

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

img

--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、查詢圖書

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