docker安装mysql, rabbitmq, tomcat, memcached,以及境像制作

    技术2022-07-13  84

     

     

    设置境像库

    编辑文件

    vi /etc/docker/daemon.json

    输入如下内容:

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

    重启服务:

    systemctl restart docker.service

    创建自定义网络

    方便各实例之间的网络访问,如固定mysql, memcached, rabbitmq地址。

    # 创建一个网络 docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 mynet # 显示当前网络 docker network ls # 第一次运行实例时,加上网络参数(主要是--net --ip参数) docker run -itd --name networkTest1 --net mynetwork --ip 172.18.0.2 centos:latest /bin/bash #将已运行的容器,连接到新网络(但IP是动态的) docker network connect mynet mysql # 实例互ping docker exec -it tomcat1 ping tomcat2

     

    安装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 \ --net mynet \ --ip 172.18.0.2 \ -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..

    删除容器实例,重建一个。

     

    安装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<aa@test.com> 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 \ --net mynetwork \ --ip 172.18.0.6 \ -d tomcat:centos # 开机启动 docker update --restart=always tomcat

     

    安装memcached

    # 安装 docker pull memcached:1.5.12 # 运行-m表示分配内存的大小,128M,默认不加-m参数,则为64M,-v参数指定了时间与宿主机同步 # -m加上,有时会报内存最小为4M的错误,暂时没找到原因,可以去掉-m参数 docker run --name memcached1.5.12 \ --net mynet \ --ip 172.18.0.5 \ -v /etc/localtime:/etc/localtime:ro \ -p 11211:11211 \ -m 128 \ -d docker.io/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 inspect --format='{{.NetworkSettings.IPAddress}}' id/names  查看实例IP地址

    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

     

     

    Processed: 0.079, SQL: 9