美文网首页
Docker常用指令, since 2021-12-16

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

作者: Mc杰夫 | 来源:发表于2021-12-16 20:45 被阅读0次

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

    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 <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
    

    相关文章

      网友评论

          本文标题:Docker常用指令, since 2021-12-16

          本文链接:https://www.haomeiwen.com/subject/hmavfrtx.html