docker安裝mysql, rabbitmq, tomcat, memcached,以及境像製作

2020-08-12 17:43:55

 

 

設定境像庫

編輯檔案

vi /etc/docker/daemon.json

輸入如下內容:

{
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

重新啓動服務:

systemctl restart docker.service

 

安裝mysql

docker pull mysql:5.7.10

# 用163境像加速,注意5.7.10小版本沒有境像
docker pull hub.c.163.com/library/mysql:5.7

# 重新命名境像
docker tag hub.c.163.com/library/mysql:5.7 mysql:5.7

# 建立目錄
mkdir /mydata/docker/mysql/logs
mkdir /mydata/docker/mysql/data
mkdir /mydata/docker/mysql/conf

# 目錄對映,注意宿主機my.cnf埠是指容器內的mysql埠
docker run -p 3307:3306 --name mysql --privileged=true  \
-v /mydata/docker/mysql/conf/my.cnf:/etc/my.cnf \
-v /mydata/docker/mysql/logs:/var/log/mysql \
-v /mydata/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=AFG444 \
-d mysql:5.7


# 設定容器範例自啓動
docker update --restart=always mysql

設定mysql遠端存取:

# 進入docker環境
docker exec -it mysql bash

# 登錄mysql
mysql -uroot -p


-- 遠程登錄許可權

use mysql;
grant all privileges on *.* to root@"%" identified by "AFG444" with grant option;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'AFG444';
flush privileges;

 

錯誤處理:

chown: changing ownership of '/var/lib/mysql/': Permission denied

加上 --privileged=true 參數

 

/usr/bin/docker-current: Error response from daemon: Conflict. The container name "/mysql" is already in use by container f4f8250c9a864f0807408af7d9ef456cb0aa50569f27373e9a1f3103d56dcd61. You have to remove (or rename) that container to be able to reuse that name..

刪除容器範例,重建一個。

# 檢視

docker ps -a

#刪除

docker rm container_id

 

安裝rabbitmq

可通過https://hub.docker.com/_/rabbitmq?tab=tags查詢版本

#帶WEB控制檯
docker pull rabbitmq:3.6.6-management

#不帶WEB控制檯
docker pull rabbitmq:3.6.6

#啓動rabbitmq容器範例
docker run --name rabbitmq3.6.6 -p 15672:15672 -p 5672:5672 -d rabbitmq:3.6.6-management

#開機啓動
docker update --restart=always rabbitmq3.6.6

web端:http://192.168.0.5:15672

 

安裝tomcat

pull方式

# 拉起境像
docker pull hub.c.163.com/library/tomcat:8.0

# 改名
docker tag hub.c.163.com/library/tomcat:8.0 tomcat:8.0

# 建立對映目錄
mkdir /mydata/docker/tomcat/conf
mkdir /mydata/docker/tomcat/logs
mkdir /mydata/docker/tomcat/webapps

# 執行容器範例
docker run -p 8081:8080 --name tomcat --privileged=true \
-v /etc/localtime:/etc/localtime \
-v /mydata/docker/tomcat/conf:/usr/local/tomcat/conf \
-v /mydata/docker/tomcat/logs:/usr/local/tomcat/logs \
-v /mydata/docker/tomcat/webapps:/usr/local/tomcat/webapps \
-d tomcat:8.0

# 開機啓動
docker update --restart=always tomcat

修改對映目錄中的內容,會同步更新docker內的檔案。

Dockerfile方式

檔案內容:
 

# FROM docker.io/centos:7
FROM centos
MAINTAINER test<[email protected]>

RUN yum install kde-l10n-Chinese -y
RUN yum reinstall glibc-common -y
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
RUN export LANG=zh_CN.UTF-8
RUN echo -e "export LANG=zh_CN.UTF-8" > /etc/locale.conf
RUN echo -e "export LANG=zh_CN.UTF-8" > /etc/profile
RUN source /etc/profile
ENV LANG zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8

COPY jdk-8u241-linux-x64.rpm /usr/   
WORKDIR /usr/
RUN rpm -ivh jdk-8u241-linux-x64.rpm   
ADD apache-tomcat-8.0.28 /usr/local/tomcat
EXPOSE 8080

ENTRYPOINT ["/bin/bash", "/usr/local/tomcat/bin/catalina.sh", "run"]

生成image

# 當前目錄使用Dockerfile檔名
docker build -t tomcat:centos .  

# 指定檔名方式,注意最後一個點
docker build -f /mydata/tools/tomcat_Dockerfile -t tomcat:centos .

# 檢視剛剛建立的境像
docker images

# 執行容器範例(下面 下麪的境像名稱,使用剛剛建立的境像)
docker run -p 8081:8080 --name tomcat --privileged=true \
-v /etc/localtime:/etc/localtime \
-v /mydata/docker/tomcat/conf:/usr/local/tomcat/conf \
-v /mydata/docker/tomcat/logs:/usr/local/tomcat/logs \
-v /mydata/docker/tomcat/webapps:/usr/local/tomcat/webapps \
-d tomcat:centos

# 開機啓動
docker update --restart=always tomcat

 

安裝memcached

# 安裝
docker pull memcached:1.5.12

# 執行-m表示分配記憶體的大小,128M,預設不加-m參數,則爲64M,-v參數指定了時間與宿主機同步
docker run --name memcached1.5.12 \
-v /etc/localtime:/etc/localtime:ro \
-p 11211:11211 \
-m 128 \
-d memcached:1.5.12 memcached

# 開機啓動
docker update --restart=always memcached1.5.12

 

常用命令

docker search mysql 搜尋境像

docker pull mysql:5.7.10  安裝境像

docker images 檢視境像

docker exec -it container_name bash 進入容器 (在容器內執行 ctrl+p+q 退出容器,但不關閉容器, ctrl+q退出並關閉)

docker rmi mysql:5.7 刪除境像

docker ps -a 檢視所有容器範例

docker rm id 刪除容器範例

docker start id  啓動容器範例(第一次啓動用run)

docker stop id  停止容器範例

docker logs [OPTIONS] CONTAINER  檢視日誌

docker create  建立容器範例,但不執行

docker run  建立容器範例,並且執行

docker rmi `docker images | grep '<none>' | awk '{print $3}'`  刪除所有none的容器(注意要用docker ps -a檢視一下,是否在執行)

容器內安裝yum

參考:https://my.oschina.net/u/4230760/blog/3119321

 

將容器範例製作成境像

將容器範例製作成tar境像

docker  commit  id  mysql:5.7.18

# 例如:
docker  commit  640c369d7093  nginx2:test   
# (test表示tag,例如mysql的5.7)

將變更後的tar包儲存在當前路徑下

docker save -o mysql5.7.18.tar mysql:5.7.18

將tar變成新的容器範例

docker load --input mysql5.7.18.tar

使用docker images檢視容器範例,

然後再使用run命令執行新的容器範例,注意埠和目錄對映關係。

 

設定容器時區,時間

在memcached的安裝中,增加了-v參數指定時間與宿主機同步。

如果是已經安裝好的doker,可使用如下方法處理。

# 複製宿主機時間檔案
docker cp /usr/share/zoneinfo/Asia/Shanghai container_id:/etc/localtime

# 重新啓動容器
docker restart container_id

# 登錄宿主機
docker exec -it container_id bash

# 檢視時間
date