镜像(image)和容器(container)
container基于images,是image的'实例化'。
注:容器或镜像都有一个独一无二的ID,在使用时可用ID的前三位代替整个ID。
基本指令
(2021.12.16 Thur)
所有以docker
开头的指令,有时需要以sudo docker
开始。
docker images //查看当前系统的镜像
docker ps //查看当前活跃的容器
docker ps -a //查看所有容器
docker search mysql //查看repository中所有版本的MySQL镜像
docker pull mysql:latest //拉取最近版本的MySQL镜像,latest是镜像的tag
docker rm <contain_id> // 删除一个容器
docker rmi <image_name>:<tag> // 删除一个镜像
Docker之MySQL操作指令
docker run -p 3307:3306 --name mysql -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:latest
//用拉取的mysql最新版建立镜像 设置root用户密码 该容器命名为mysql 容器内端口3306
// 映射到宿主上的端口3307
docker run -p 3307:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=12345678 \
-d mysql:latest
//用最新版建立镜像 映射 并建立目录映射 :前为外部映射地址 :后为镜像内的目录地址
docker exec -it mysql bash // 进入名为mysql的容器中的bash模式
mysql -uroot -p //进入之后登陆mysql
如果你的容器运行正常,但是无法访问到MySQL,一般有以下两个可能的原因:
- 防火墙阻拦
# 开放端口:
$ systemctl status firewalld
$ firewall-cmd --zone=public --add-port=3306/tcp -permanent
$ firewall-cmd --reload
# 关闭防火墙:
$ sudo systemctl stop firewalld
- 需要进入docker本地客户端设置远程访问账号
docker exec -it mysql bash
mysql -uroot -p12345678
mysql> grant all privileges on *.* to root@'%' identified by "password";
(2022.01.10 Mon)
容器相关操作
启动一个已有的容器
$ docker start <container_id>
进入一个容器的bash环境
$ docker exec -it <container_id> /bin/bash
$ docker exec -it <container_id> bash
保存一个容器成为一个本地文件
$ docker export <contain_id> > <local_file_name>
$ docker export 1fb > container_demo.tar
# or
$ docker export -o <local_file_name> <container_id>
加载一个保存为本地文件的容器。注意,可载入新的设置,待查。
$ docker import container_demo.tar
另:import/export和load/save分别是对容器和镜像的操作,除了操作对象不同,另一个差别是i/e保存的文件略小,因为i/e保存时会丢失历史记录和元数据,仅保存当时状态,相当于snapshot。
删除一个容器
$ docker rm -f <container_id>
修改当前容器,并保存为一个新的镜像。在container做修改后,退出,输入下面命令
$ docker commit -m='comment' -a='some_name' <container_id> <image_id>:<tag>
复制容器外文件到容器内部
$ docker cp /home/mysql.cnf <container_id>:/etc/mysql/mysql.conf.d
关闭一个容器
$ docker stop <container_id>
镜像image的相关操作
检察镜像
docker inspect <image_name>:<tag>
docker inspect mysql:latest
已命令行的方式启动镜像,即启动镜像并且进入命令行
$ docker run -t -i <image_id>:<tag> <bash_dir>
$ docker run -t -i mysql:latest /bin/bash
启动一个镜像,并在其中安装软件
$ docker run <image_id>:<tag> apt-get install <service_name>
$ docker run mysql:latest apt-get install nano
Docker mysql 挂载外部配置和数据
获取镜像
$ docker pull mysql:latest
创建挂载目录
$ mkdir -p /x/home/zengzhang/mysql/custom/conf
$ mkdir -p /x/home/zengzhang/mysql/custom/data
$ mkdir -p /x/home/zengzhang/mysql/custom/logs
放入my.cnf
$ touch /x/home/zengzhang/mysql/custom/conf/my.cnf
在my.cnf中加入下面代码
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Custom config should go here
!includedir /etc/mysql/conf.d/
创建custom.sh脚本,启动容器:
$ docker run --restart=always -d -v /x/home/zengzhang/mysql/custom/conf/my.cnf:/etc/mysql/my.cnf \
-v /x/home/zengzhang/mysql/custom/logs:/logs \
-v /x/home/zengzhang/mysql/custom/data/mysql:/var/lib/mysql \
-p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
其中的参数解释:
--restart=always -> 开机启动容器,容器异常自动重启
-d -> 以守护进程的方式启动容器
-v /home/app/mysql/conf.d/my.cnf:/etc/mysql/my.cnf -> 映射配置文件
-v /home/app/mysql/logs:/logs -> 映射日志
-v /home/app/mysql/data/mysql:/var/lib/mysql -> 映射数据
-p 3306:3306 -> 绑定宿主机端口
--name mysql -> 指定容器名称,新建容器名称
-e MYSQL_ROOT_PASSWORD=123456 -> 写入配置root密码
起rabbitMQ服务
起一个(rabbitmq)服务,映射不同的端口,并赋用户名和密码:
$ docker run -dit --name p365-email-rabbitmq -e RABBITMQ_DEFAULT_USER=rom -e RABBITMQ_DEFAULT_PASS=xxx -p 5672:5672 -p 15672:15672 -p 25672:25672 rabbitmq:management
后改成:
$ docker run -dit --name p365-email-rabbitmq -e RABBITMQ_DEFAULT_USER=rom -e RABBITMQ_DEFAULT_PASS=xxx -p 5672:5672 -p 50070:15672 -p 50075:25672 rabbitmq:management
$ docker run -dit --name p365-email-rabbitmq -p 5672:5672 -p 15672:15672 -p 25672:25672 rabbitmq:latest management
之后需要进到container中开启web插件的服务:
$ docker exec -it [container_id] /bin/bash
$ rabbitmq-plugins enable rabbitmq_management
$ rabbitmqctl start_app
理论上这种方法可以使得用浏览器访问ip:15672返回rabbitmq的页面。但是10.08时尝试failed。
查看某个容器的logs文件:
$ docker logs [container_id/container_id]
Docker compose做镜像的流程
在服务器的某个repo文件夹里,用docker-compose build…
相关的命令可以生成一个镜像。用docker save…可以把镜像做成一个.tar文件,也就是镜像打包。传这两个文件到另一个server,用docker load可以将.tar文件变成镜像和运行了,然后用docker compose的build指令。
加载镜像包,
$ docker load -i pluto365-email.tar
加载compose文件中的配置
$ docker-compose -f docker-compose.yml up --build
这个指令会实时打开logs文件。可能需要加-d之类的内容。在docker-compose.yml文件中暴露需要修改的参数。
(2022.10.01 Sat)
由docker-compose
创建镜像并启动镜像
docker-compose up
网友评论