Docker安装、常见命令、安装常见容器(Mysql、Redis等)

目录

一、Docker安装

二、Docker常见命令

2.1 镜像命令

2.2 容器命令

2.3 总结

2.4 容器挂载-容器卷技术

三、Docker安装mysql容器

3.1 下载镜像文件

3.2 创建实例并启动

3.3 MySQL 配置

3.4 进入容器文件系统

四、Docker安装Redis


一、Docker安装

官网安装指引:Install Docker Engine on CentOS | Docker Documentation

# 0. 安装前先更新yum,不然有可能出现本机无法连接虚拟机的mysql、redis等
sudo yum update
​
# 1. 卸载之前的docker   (注意:\复制的时候可能存在问题,建议手敲这部分)
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                  
# 2. 需要的安装包
yum install -y yum-utils
​
# 3. 设置镜像的仓库
# 默认是从国外的,不推荐
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
# 推荐使用国内的,访问速度快
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum软件包索引
yum makecache 
​
# 4. 安装docker相关的 docker-ce 社区版 而ee是企业版
yum install docker-ce docker-ce-cli containerd.io
# 5. 启动docker
systemctl start docker
# 6. 使用docker version查看是否按照成功
docker version
# 7. 设置开机自启动docker服务
systemctl enable docker

配置阿里云镜像加速

地址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

 Docker安装、常见命令、安装常见容器(Mysql、Redis等)_第1张图片

# 配置阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://n6lhbngn.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

二、Docker常见命令

官网:docker | Docker Documentation

2.1 镜像命令

docker images   #查看所有本地主机上的镜像
docker pull 镜像名称[:tag]  #下载镜像,如果不写tag,默认就是latest最新版本
docker rmi -f 镜像id  #删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id 镜像id   #删除指定的镜像
docker rmi -f $(docker images -aq)  #删除全部的镜像

docker拉取的镜像默认都来自https://hub.docker.com/

举例:

#查看所有本地主机上的镜像
[root@VM-16-11-centos mydata]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        5.7       c20987f18b13   9 months ago   448MB
mysql        8.0       3218b38490ce   9 months ago   516MB
​
#删除指定镜像
[root@VM-16-11-centos mydata]# docker rmi -f 3218b38490ce
Untagged: mysql:8.0
Untagged: mysql@sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Deleted: sha256:3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3b
Deleted: sha256:aa81ca46575069829fe1b3c654d9e8feb43b4373932159fe2cad1ac13524a2f5
Deleted: sha256:0558823b9fbe967ea6d7174999be3cc9250b3423036370dc1a6888168cbd224d
Deleted: sha256:a46013db1d31231a0e1bac7eeda5ad4786dea0b1773927b45f92ea352a6d7ff9
Deleted: sha256:af161a47bb22852e9e3caf39f1dcd590b64bb8fae54315f9c2e7dc35b025e4e3
Deleted: sha256:feff1495e6982a7e91edc59b96ea74fd80e03674d92c7ec8a502b417268822ff
​
#查看所有本地主机上的镜像
[root@VM-16-11-centos mydata]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        5.7       c20987f18b13   9 months ago   448MB
​
#下载镜像
[root@VM-16-11-centos mydata]# docker pull mysql:8.0
8.0: Pulling from library/mysql
72a69066d2fe: Already exists  #分层下载: docker image 的核心 联合文件系统
93619dbc5b36: Already exists 
99da31dd6142: Already exists 
626033c43d70: Already exists 
37d5d7efb64e: Already exists 
ac563158d721: Already exists 
d2ba16033dad: Already exists 
688ba7d5c01a: Pull complete 
00e060b6d11d: Pull complete 
1c04857f594f: Pull complete 
4d7cfa90e6ea: Pull complete 
e0431212d27d: Pull complete 
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:8.0
docker.io/library/mysql:8.0
​
#查看所有本地主机上的镜像
[root@VM-16-11-centos mydata]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        5.7       c20987f18b13   9 months ago   448MB
mysql        8.0       3218b38490ce   9 months ago   516MB

2.2 容器命令

docker run  镜像id/容器名称    #新建容器并启动
docker ps             #列出所有运行的容器
docker ps -a          #列出所有的容器,包括未运行的
docker rm  容器id      #删除指定容器
docker rm -f $(docker ps -aq)    #删除所有的容器
docker ps -a -q|xargs docker rm  #删除所有的容器
docker start 容器id/容器名称       #启动容器
docker restart 容器id/容器名称     #重启容器
docker stop 容器id/容器名称        #停止当前正在运行的容器
docker kill 容器id/容器名称        #强制停止当前容器
docker exec -it 容器id/容器名称 /bin/bash   #进入当前正在运行的容器(注意:特殊的,当前使用exit退出容器不会停止容器)
exit        # 停止容器并退出(后台方式运行则仅退出)
Ctrl+P+Q     # 不停止容器退出

详解

docker run [可选参数] image
#参数说明
--name="Name" #容器名字 tomcat01 tomcat02 用来区分容器
-d           #后台方式运行
-it          #使用交互方式运行,进入容器查看内容(注意:使用这个参数表示还进入了容器中)
-p           #指定容器的端口
        -p ip:主机端口:容器端口
        -p 主机端口:容器端口(常用)
        -p 容器端口
-P(大写)      #随机指定端口

举例:

docker run 
-p 3306:3306 
--name test-mysql 
-v /mydata/test-mysql/log:/var/log/mysql 
-v /mydata/test-mysql/data:/var/lib/mysql 
-v /mydata/test-mysql/conf:/etc/mysql 
-e MYSQL_ROOT_PASSWORD=SZDXsht2015  
-d 
mysql:5.7
docker run 
--name nginx 
-d 
-p 7777:80 
nginx

2.3 总结

拉取(下载)镜像

docker pull 镜像名称[:version]

查看本地镜像:

docker images

新建容器并运行

docker run [可选参数] 镜像名称
​可选参数
 --name 容器别名     -->>      给容器起别名
 -d                -->>      后台方式运行
 -it               -->>      使用交互方式运行,进入容器查看内容
 -p 主机端口:容器端口 -->>      建立主机与容器端口映射
 -P(大写)         -->>      随机指定端口
 -v 主机目录:容器目录 -->>      实现容器挂载

进入容器(适用于运行的容器)

docker exec -it 容器别名(或容器id) /bin/bash

PS: 进入容器的方法有多种,但是常用的方法如上这种,此方法要求容器必须启动,否则不能进入容器中。

退出容器

exit

查看所有容器

docker ps			-->>	当前正在运行的所有容器
docker ps -a		-->>	所有容器
docker ps -l		-->>	查看最新创建的容器
docker ps --help	-->>	 查看docker ps的相关参数

 启动、重启、停止容器

docker start 容器id		-->>	启动容器
docker restart 容器id		-->>	重启容器
docker stop 容器id		-->>	停止当前正在运行的容器
docker kill 容器id		-->>	强制停止当前容器

删除容器

docker rm 容器id		-->>		删除指定的容器,不能删除正在运行的容器,如果要强制删除docker rm -rf 容器id
docker rm -f $(docker ps -aq)  #删除指定的容器
docker ps -a -q|xargs docker rm  #删除所有的容器

2.4 容器挂载-容器卷技术

前言

我们进入容器之后,想对容器中某个配置文件进行修改,发现使用vim命令并不生效,提示:bash: vim: command not found。

这是因为docker容器中仅仅提供了最小的Linux系统内核。只有一些基本的指令,如果想要使用vim这些命令是需要单独下载安装的。

但是通常情况下,我们并不会选择在容器内部进行安装。而是通过挂载,将容器内的目录映射到我们Linux服务器中。

然后在Linux服务器对应的挂载路径中修改之后,就会自动映射到容器内部,实现动态修改。

这样做的好处很多:

一是减小容器的体积,

二是如果容器删除了,不至于数据丢失,实现容器的持久化和同步共享。

挂载方法

具体挂载方法前面提到过一种,就是在新建并运行容器的时候,添加参数 -v 主机目录:容器目录,此为指定路径挂载。

下面系统介绍常见的几种容器挂载方法:

docker run -d  --name nginx_01 -v  /etc/nginx  nginx   #匿名挂载
docker run -d  --name nginx_02 -v  nginx_my02:/etc/nginx  nginx  #具名挂载
docker run -d  --name nginx_03 -v  /home/nginx_my03/nginx:/etc/nginx  nginx #指定路径挂载
-v    容器内路径              #匿名挂载
-v    卷名:容器内路径         #具名挂载
-v    /宿主内路径:容器内路径   #指定路径挂载

示例

docker run -p 3306:3306 --name test-mysql \
-v /mydata/test-mysql/log:/var/log/mysql \
-v /mydata/test-mysql/data:/var/lib/mysql \
-v /mydata/test-mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
​
其它参数解释:
-e MYSQL_ROOT_PASSWORD=123456  -->>     初始化root用户的密码

查看挂载路径

之后如果我们想查看系统中某个容器它挂载了哪些路径,应该如何查看?

docker inspect 容器别名(或容器id)

注意

挂载的路径内外是共享的,如果原本容器的某个路径中包含其他内容,外部挂载是没有将内部文件复制出来的。

挂载最好是在创建容器的时候就进行。

思考:如果容器创建时没有挂载,如何给已有容器进行挂载呢?

三、Docker安装mysql容器

3.1 下载镜像文件

docker pull mysql:5.7

3.2 创建实例并启动

docker run -p 3306:3306 --name mysql5.7 \
-v /mydata/mysql5.7/log:/var/log/mysql \
-v /mydata/mysql5.7/data:/var/lib/mysql \
-v /mydata/mysql5.7/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
-v /mydata/mysql5.7/conf:/etc/mysql:将配置文件夹挂载到主机
-v /mydata/mysql5.7/log:/var/log/mysql:将日志文件夹挂载到主机
-v /mydata/mysql5.7/data:/var/lib/mysql/:将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码

3.3 MySQL 配置

vi /mydata/mysql5.7/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

3.4 进入容器文件系统

docker exec -it mysql5.7 /bin/bash

我们也可以通过可视化工具连接当前mysql了。

如果是云服务器的话,需要开放对应的端口。

安装Mysql8.0版本遇到的问题:

Docker启动mysql8.0版本自动退出?

答案:[转]Docker启动mysql8.0版本自动退出,Supplied value : /var/lib/mysql-files(转载请删除括号里的内容)_docker启动mysql自动退出_树根朽木的博客-CSDN博客

云服务器通过docker镜像安装的mysql8.0容器不能远程连接?

mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。

答案:Docker安装Mysql 8.0_docker安装mysql8.0_Cherry_King的博客-CSDN博客

mysql5.7无需设置即可远程访问,是因为在mysql数据库中已经配置好了规则。而8.0版本需要我们手动更改规则,更改方法见上面链接。

Docker安装、常见命令、安装常见容器(Mysql、Redis等)_第2张图片

 

安装mysql8.0无法启动,还有可能是没有完全挂载上,可以使用如下命令新建容器并运行

docker run -p 3309:3306 --name test-mysql8.0 \
-v /mydata/test-mysql8.0/log:/var/log/mysql \
-v /mydata/test-mysql8.0/data:/var/lib/mysql \
-v /mydata/test-mysql8.0/conf:/etc/mysql \
-v /mydata/test-mysql8.0/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0

四、Docker安装Redis

如下步骤依次执行:

docker pull redis
docker images

新建容器并运行

需要提前新建

如果不提前创建文件名称的话,一会在挂载的时候它可能误认为是文件夹

mkdir -p /mydata/myredis/conf

touch /mydata/myredis/conf/redis.conf

新建容器并运行

docker run -p 6379:6379 --name myredis -v /mydata/myredis/data:/data \ 
-v /mydata/myredis/conf/redis.conf:/etc/redis/redis.conf \ 
-d redis redis-server

使用docker安装的redis默认是没有配置文件的。因此需要去官网下载相同版本的redis,然后把redis.conf配置文件复制到目录中,修改相关配置。

如果你的redis是安装在云服务器上的,那么是一定要配置文件的。

需要在配置文件中设置redis的密码,否则当我们将云服务器的redis对应端口号开放以后,又没有密码,那么意味着任何人都能直接进入我们的redis中。安全问题直接拉满!

配置完成密码以后,需要重启redis才能生效。docker restart myredis

以后,当我们建立客户端链接的时候,就需要密码才可以。auth redis密码

[root@VM-16-11-centos conf]# docker exec -it myredis redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth abc123
OK

配置密码的方式也很简单:参考:redis如何设置密码_redis2.4.6.0 加密码_普通网友的博客-CSDN博客

你可能感兴趣的:(编程环境安装,docker,容器,运维)