常用操作

检索

  • docker search 关键字
root@dj-virtual-machine:/# docker search mysql

拉取

  • docker pull 镜像名:tag
# 拉取最新版本
root@dj-virtual-machine:/# docker pull mysql:latest
# 拉取指定版本
root@dj-virtual-machine:/# docker pull mysql:8.0.21

列表

  • 查看所有本地镜像
root@dj-virtual-machine:/# docker images
REPOSITORY   TAG          IMAGE ID       CREATED        SIZE
redis        6.0.9        ef47f3b6dc11   2 weeks ago    104MB
mysql        8.0.21       8e85dd5c3255   2 months ago   544MB
root@dj-virtual-machine:/#
  • 查看最新版本镜像的版本号
root@dj-virtual-machine:/# docker image inspect rabbitmq:management | grep -i version
                "OPENSSL_VERSION=1.1.1i",
                "OTP_VERSION=23.2.1",
                "RABBITMQ_VERSION=3.8.9",
        "DockerVersion": "19.03.12",
                "OPENSSL_VERSION=1.1.1i",
                "OTP_VERSION=23.2.1",
                "RABBITMQ_VERSION=3.8.9",
root@dj-virtual-machine:/#

删除

  • 删除指定的本地镜像
root@dj-virtual-machine:/# docker rmi IMAGE ID

容器操作

搜索镜像,进行pull拉取,run,根据镜像启动一个容器,一个镜像可以启动多个容器。

运行

  • docker run –name container-name -d image-name

参数:

  • –name :自定义容器名
  • -d :后台运行,并返回容器id
  • image-name :指定镜像模板(如果有标签,应该指明标签)
root@dj-virtual-machine:/# docker run --name mytomcat -d tomcat:latest

列表

  • docker ps(查看运行中的容器)
  • 加上-a :查看所有容器
root@dj-virtual-machine:/# docker ps -a

启动

root@dj-virtual-machine:/# docker start mytomcat

拷贝

  • 在宿主机和容器之间拷贝文件
# 1、将宿主机文件拷贝到应用内
# docker cp 要拷贝到宿主机的相应路径 容器名:要拷贝的文件在容器中的命令
# 示例:将宿主机中的sources.list.ubuntu文件拷贝到redis应用的 /etc/apt/目录下
root@dj-virtual-machine:/# vim sources.list.ubuntu
root@dj-virtual-machine:/# docker cp /sources.list.ubuntu myredis:/etc/apt
root@dj-virtual-machine:/# docker exec -it myredis /bin/bash
root@45d612b634af:/data# cd /etc/apt
root@45d612b634af:/etc/apt# ls
apt.conf.d  auth.conf.d  preferences.d	sources.list  sources.list.bak	sources.list.d	sources.list.ubuntu  trusted.gpg.d
root@45d612b634af:/etc/apt# cat sources.list.ubuntu 
hello redis, im ubuntu.
root@45d612b634af:/etc/apt#

# 备注:此操作可用于docker应用内部需要编辑文档但又未安装vi/vim编辑器,就需要利用apt-get进行install安装,但是应用默认用的是国外的源(需跟换),采用此种办法进行更换(更换前做好备份工作)。

--------------------

# 查看redis6.0的服务器系统版本
root@45d612b634af:/data# cat /etc/issue
Debian GNU/Linux 10 \n \l

# 准备需要拷贝的国内源
# ali sources
deb http://mirrors.aliyun.com/debian/ buster main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib
deb http://mirrors.aliyun.com/debian-security buster/updates main
deb-src http://mirrors.aliyun.com/debian-security buster/updates main
deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib

# 最后执行第1步操作完成更换源(拷贝之后记得改名)。

------------------------------------------------------------

# 2、将应用内文件拷贝到宿主机同理
# docker cp 容器名:要拷贝的文件在容器中的命令 要拷贝到宿主机的相应路径
root@dj-virtual-machine:/# docker cp myredis:/etc/apt/sources.list /home/dj/dev/

停止

  • docker stop container-id/container-name
  • 停止当前正在运行的容器
root@dj-virtual-machine:/# docker stop mytomcat

重启

root@dj-virtual-machine:/# docker restart container-id

删除

root@dj-virtual-machine:/# docker rm container-id

端口映射

运行镜像的参数:-p(虚拟机端口映射到容器内部端口,-p 8080:8080

启动一个做了端口映射的tomcat:

root@dj-virtual-machine:/# docker run --name mytomcat -d -p 8080:8080 tomcat:latest
# 或者
root@dj-virtual-machine:/# docker run -d -p 8080:8080 tomcat

容器日志

root@dj-virtual-machine:/# docker logs container-id/container-name

Docker容器

安装MySQL应用

简单使用

  • 拉取镜像
  • 运行
root@dj-virtual-machine:/# docker run -d -p 3306:3306 --name mysql8.0 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.21
  • 进入mysql应用
root@dj-virtual-machine:/# docker exec -it mysql5.6 /bin/bash
# 或者
root@dj-virtual-machine:/# docker exec -it mysql5.6 bash
  • 退出mysql应用
root@01a52bf45c96:/# exit
# 或者
Ctrl + P + Q

挂载自定义mysql配置

# 使用配置文件
root@dj-virtual-machine:/# docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

# 不使用配置文件(直接指定参数)
root@dj-virtual-machine:/# docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

navicat连接docker mysql

问题
  • 高版本mysql数据库(mysql8.0)连接失败。(2059 – Xxxxxx)

原因
  • MySQL 8.0不支持动态修改密码验证方式
解决
  • docker启动mysql
  • 进入mysql
  • 更新密码
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.00 sec)

mysql>
  • 重启mysql
root@dj-virtual-machine:/# docker restart mysql8.0

安装Redis应用

使用redis

# 1、拉取redis镜像
root@dj-virtual-machine:/# docker pull redis:6.0.9
# 2、直接运行
root@dj-virtual-machine:/# docker run -itd --name redis6.0 -p 6379:6379 redis:6.0.9
# 3、进入redis应用
root@dj-virtual-machine:/# docker exec -it redis6.0 /bin/bash
# 4、使用redis-cli命令连接redis-server服务器端
root@8b580147c4de:/data# redis-cli
127.0.0.1:6379>
# 5、使用 set get
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379>
# 6、退出
127.0.0.1:6379> exit
root@8b580147c4de:/data# exit
exit
root@dj-virtual-machine:/#

可能出现的问题

参考:https://blog.csdn.net/weixin_42456466/article/details/87270959

Docker内的其他应用可能无法连接使用redis。因为docker上运行的每个容器都是互相隔离的,redis默认不允许外部连接,因此想要部署在Docker内的应用连接上redis,需要修改redis的默认配置。然后再以配置文件运行redis

  • github获取配置文件:redis.conf(注意版本的一致性)

github下载

  • 获取redis.conf,将bind 127.0.0.1注释,这限制了redis只能本地访问。
# JUST COMMENT OUT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# bind 127.0.0.1
  • 关闭保护模式(保护模式,默认为:yes,redis只能本地访问)
# even if no authentication is configured, nor a specific set of interfaces
# are explicitly listed using the "bind" directive.
# protected-mode yes
protected-mode no
  • 以配置文件运行redis并设置密码,简单使用redis。
root@dj-virtual-machine:/# docker run -p 6379:6379 --name myredis -v /usr/local/docker/redis.conf:/etc/redis/redis.conf -d redis:6.0.9 redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456

# 参数说明
# 1、-p 6379:6379 端口映射,前面代表虚拟主机,后面代表容器。
# 2、--name myredis 容器起名,方便操作。
# 3、-v 挂载目录(来访问外部主机资源),规则与参数映射相同。
# 4、/usr/local/docker/ github下载来的conf配置文件放在这个目录下。
# 5、redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,实则为加载挂载在外部主机目录:/usr/local/docker下的conf配置文件。
# 6、-id redis:6.0.9 后台启动redis(指定版本为6.0.9)容器
# 7、--appendonly yes 开启redis持久化
# 8、--requirepass 123456 设置redis密码(也可以之后进入容器再设置)

------------------------------------------------------------

# 容器内设置redis密码
root@45d612b634af:/data# redis-cli
127.0.0.1:6379> auth '123456'
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"
127.0.0.1:6379> config set requirepass redis123
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "redis123"
127.0.0.1:6379>

------------------------------------------------------------

# 简单使用redis
root@45d612b634af:/data# redis-cli
127.0.0.1:6379> set key "hello redis!!"
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 'redis123'
OK
127.0.0.1:6379> set key "hello redis!!!"
OK
127.0.0.1:6379> get key
"hello redis!!!"
127.0.0.1:6379>
  • 启动成功,进入redis容器,查看docker给容器分配的ip
root@dj-virtual-machine:/# docker exec -it myredis /bin/bash
root@9dc8083402da:/data# cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.3	9dc8083402da
root@9dc8083402da:/data#
  • 其他容器连接redis时要将redis连接配置的127.0.0.1改为刚刚找到ip(172.17.0.3)。

redis local bin命令

# redis local bin命令

root@8b580147c4de:/usr/local/bin# ls -l
total 26516
-rwxrwxr-x 1 root root      374 Dec 11 16:23 docker-entrypoint.sh
-rwxr-xr-x 1 root root  2404352 Apr 16  2020 gosu
-rwxr-xr-x 1 root root  6707864 Dec 11 16:24 redis-benchmark(redis性能测试工具)
lrwxrwxrwx 1 root root       12 Dec 11 16:24 redis-check-aof -> redis-server(redis aof持久化工具)
lrwxrwxrwx 1 root root       12 Dec 11 16:24 redis-check-rdb -> redis-server(redis rdb持久化工具)
-rwxr-xr-x 1 root root  6679920 Dec 11 16:24 redis-cli(redis命令行客户端)
lrwxrwxrwx 1 root root       12 Dec 11 16:24 redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 11353336 Dec 11 16:24 redis-server(redis服务器)
root@8b580147c4de:/usr/local/bin# 

安装Rabbitmq应用

  • 拉取镜像
# rabbit:management带web管理界面
root@dj-virtual-machine:/# docker pull rabbitmq:management
  • 运行镜像
# 5672为rabbitmq服务的端口,15672为访问web管理界面的端口。
root@dj-virtual-machine:/# docker run -d -p 5672:5672 -p 15672:15672 --name rabbmitma3 92c743b6c055
  • web管理界面(username:guest,password:guest)

安装Elasticsearch应用

  • 拉取镜像
root@dj-virtual-machine:/# docker pull elasticsearch:5.6.12
  • 运行镜像
# 指定初始化内存、最大占用内存大小为256m,9200(服务端口),9300(其他应用访问端口)
root@dj-virtual-machine:/# docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name es5.6 5acf0e8da90b

安装Zookeeper应用

  • 拉取镜像
root@dj-virtual-machine:/# docker pull zookeeper:3.6.2
  • 运行镜像
# 暴露 2181 客户端端口
root@dj-virtual-machine:/# docker run --name zk3.6 -p 2181:2181 --restart always -d e1763fd3a0e3

分类: Linux虚拟机

Deng Jia

Keep Moving.

0 条评论

发表评论

电子邮件地址不会被公开。