Docker常用指令, since 2021-12-16

镜像(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   // 删除一个容器
docker rmi : // 删除一个镜像

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,一般有以下两个可能的原因:

  1. 防火墙阻拦
# 开放端口:
$ systemctl status firewalld
$ firewall-cmd  --zone=public --add-port=3306/tcp -permanent
$ firewall-cmd  --reload
# 关闭防火墙:
$ sudo systemctl stop firewalld
  1. 需要进入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 

进入一个容器的bash环境

$ docker exec -it  /bin/bash
$ docker exec -it  bash

保存一个容器成为一个本地文件

$ docker export  > 
$ docker export 1fb > container_demo.tar
# or
$ docker export -o  

加载一个保存为本地文件的容器。注意,可载入新的设置,待查。

$ docker import container_demo.tar

另:import/export和load/save分别是对容器和镜像的操作,除了操作对象不同,另一个差别是i/e保存的文件略小,因为i/e保存时会丢失历史记录和元数据,仅保存当时状态,相当于snapshot。
删除一个容器

$ docker rm -f 

修改当前容器,并保存为一个新的镜像。在container做修改后,退出,输入下面命令

$ docker commit -m='comment' -a='some_name'  :

复制容器外文件到容器内部

$ docker cp /home/mysql.cnf :/etc/mysql/mysql.conf.d

关闭一个容器

$ docker stop 

镜像image的相关操作

检察镜像

docker inspect :
docker inspect mysql:latest

已命令行的方式启动镜像,即启动镜像并且进入命令行

$ docker run -t -i : 
$ docker run -t -i mysql:latest /bin/bash

启动一个镜像,并在其中安装软件

$ docker run : apt-get install 
$ 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

你可能感兴趣的:(Docker常用指令, since 2021-12-16)