五、Docker命令

1、Docker常用操作

Docker利用仓库管理镜像的设计与Git非常相似。我们要配置的应用运行环境就是镜像,如Tomcat镜像,当我们本地没有该镜像的时候,就需要从远程仓库pull下来,当我们启动这个镜像时,就会有一份镜像被复制并运行在容器中。如果我们改动了容器里面的内容,也可以将其commit保存成新的镜像。

(1)镜像命令

查看镜像:查看本地所有的镜像

docker images

docker images -q # 查看所用镜像的id

搜索镜像:从网络中查找需要的镜像

docker search 镜像名称

拉取镜像:从Docker仓库下载镜像到本地,镜像名称格式为“名称:版本号”,如果版本号不指定则是最新的版本。如果不知道镜像版本,可以去docker hub搜索对应镜像查看。

docker pull 镜像名称

删除镜像:删除本地镜像

docker rmi 镜像id # 删除指定本地镜像

docker rmi `docker images -q`  # 删除所有本地镜像

(2)容器命令

创建并启动容器:

docker run 参数

参数说明:

-i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。

-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。

-d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。

-it 创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器

--name:为创建的容器命名。

进入容器:

docker exec 参数 # 退出容器,容器不会关闭

查看容器的运行状态:

docker container ls查看当前有那些容器正在运行。

docker container ls -a查看所有容器,包括已退出的容器。

启动未运行容器:

docker start 容器名称

停止守护式容器:

docker stop 容器名称

删除容器:如果容器是运行状态则删除失败,需要停止容器才能删除

docker rm 容器名称

查看容器信息

docker inspect 容器名称

查看容器日志:

docker container logs命令只会输出最后几条日志并返回。更为推荐的方式是添加-f参数,用于监控容器的标准输出,功能类似于tail -f。

sudo docker container logs -f web

(3)主机和容器之间的文件拷贝

我们利用cp命令从主机将文件拷贝到容器中,或从容器拷贝文件都主机。

docker cp  主机路径    ID/NAME:容器路径        //这是从主机拷贝文件到容器

docker cp  ID/NAME:容器路径    主机路径        //这是从容器拷贝文件到主机

2、部署MySQL

(1)获取MySQL8的镜像

在DockerHub中可以找到MySQL的最新版本是8.x。

1、搜索mysql镜像

docker search mysql

2、拉取mysql镜像

docker pull mysql

注意:默认就是最新版本。

(2)数据卷概述

数据卷是存在于一个或多个容器中的特定文件或文件夹,这个文件或文件夹以独立于docker文件系统的形式存在于宿主机中。

那么宿主机的任意目录都是数据卷吗?当然不是。这里还需要在容器中创建一个目录,然后将宿主机目录和容器目录绑定起来,这个宿主机目录才能成为数据卷。

当容器目录和数据卷目录绑定后,对方的修改会立即在二者之间同步。

一个数据卷可以被多个容器同时挂载。一个容器也可以被挂载多个数据卷。

(3)挂载主机目录

使用数据卷在多个容器之间可以非常方便地实现数据共享,但是在开发阶段需要频繁地修改文件,也就需要频繁地在本地文件和数据卷之间进行同步。Docker支持将本地目录挂载到容器中,这样修改宿主机中目录的内容,对容器来说是立即生效的。

Docker使用 --mount -v 参数挂载本地主机的目录到容器中的目录。

注意:本地目录的路径必须是绝对路径。

--mount参数由多个键值对组成,以逗号分隔。

type选项:值为bind(默认)、volume或tmpfs。这里都是绑定装入,类型始终是bind。

source选项。对于绑定装入是Docker守护程序主机上的文件或目录的路径。

destination、dst或target选项:挂载到容器中的路径。

readonly选项:(如果存在)导致绑定装入以只读方式装入容器中。

-v和--mount之间的区别:

使用-v绑定宿主机上不存在的文件或者目录时,会自动生成相应的文件或者目录,--mount则会抛出异常,所以用--mount指定文件和路径时需要提前创建以保证其存在。

因为--mount支持集群,所以推荐使用--mount命令。

(4)创建MySQL容器(目录方式)

MySQL容器需要配置三个数据卷:配置文件、日志文件、数据文件。

mysql/data存放数据库文件。必须要挂载到容器外,否则容器重启一切数据都会消失。

mysql/log 是数据库主动生成的log。建议挂载到容器外。

mysql/config/my.cnf 是数据库的配置文件。

1、在宿主机中创建mysql目录,然后创建三个子目录:

mkdir -p /data/mysql

cd /data/mysql

mkdir conf data log      子目录conf保存配置,data保存数据,log保存日志

chmod 650 * -R         为docker访问宿主机目录授权(mysql不允许777权限)

cd /data/mysql/conf        进入目录创建配置文件

vi my.cnf        创建MySQL的配置文件,再使用 :wq 保存

其中,需提前在 /data/mysql/conf下创建my.cnf,并添加配置信息

# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

#
# The MySQL  Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
lower-case-table-names=1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
skip-name-resolve

# Custom config should go here
!includedir /etc/mysql/conf.d/

2、使用docker create命令来创建一个新的容器并运行

为容器绑定三个数据卷目录:配置目录、日志目录、数据目录

docker run -d \
  --name mysql-3306 \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -v /data/mysql/data:/var/lib/mysql \
  -v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf \
  -v /data/mysql/log:/var/log/mysql \
  -v /etc/localtime:/etc/localtime:ro \
  --restart always \
  mysql --lower-case-table-names=1

参数说明:

-p 3306:3306:将容器的3306端口映射到宿主机的3306端口。

-v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf:配置目录。

-v /data/mysql/log:/var/log/mysql:日志目录。

-v /data/mysql/data:/var/lib/mysql:数据目录。

-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码。如果不设置则MySQL第一次运行时会生成一个默认密码,需要进入容器的控制台中查看。

-v /etc/localtime:/etc/localtime:ro 是让容器的时钟与宿主机时钟同步,避免时区的问题,ro是read only的意思,就是只读。

--lower-case-table-names=1 mysql8设置表名大小写不敏感(lower_case_table_names=1),默认是0,表名大小写敏感会严格区分大小写。

(6)使用客户端WorkBranch连接MySQL

1、MySQL8默认认证方式支持加密,只有MySQL8的WorkBranch可以连接。

注意:MySQL8默认不允许使用root账户远程登录,但是MySQL8的最新Docker镜像支持root账户远程登录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值