Docker删除镜像和容器

当一个host中镜像和容器较多,需要重置时可选择删除其中部分或全部的镜像和容器。那么你就需要下面的操作了。
1、删除容器
1)首先需要停止所有的容器
docker stop $(docker ps -a -q)
2)删除所有的容器(只删除单个时把后面的变量改为image id即可)
docker rm $(docker ps -a -q)
2、删除镜像
1)查看host中的镜像
docker images
2)删除指定id的镜像
docker rmi Docker学习笔记 - 图1
想要删除untagged images,也就是那些id为的image的话可以用
docker rmi $(docker images | grep “^” | awk “{print $3}”)
3)删除全部的images
docker rmi $(docker images -q)
3、当要删除的iamges和其他的镜像有关联而无法删除时
Docker学习笔记 - 图2
可通过 -f 参数强制删除
docker rmi -f $(docker images -q)

docker常规操作——启动、停止、重启容器实例

一、启动一个已经停止的容器实例

docker start 容器ID或容器名

  1. 先查看已经暂停的容器实例信息
  2. 通过docker start 59ec 启动容器
  3. 通过docker ps 查看当前启动的容器

二、停止一个正在运行的容器
1、docker stop 此方式常常被翻译为优雅的停止容器

docker stop 容器ID或容器名
参数 -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态
docker stop -t=60 容器ID或容器名

2、docker kill

docker kill 容器ID或容器名 :直接关闭容器

由此可见stop和kill的主要区别:stop给与一定的关闭时间交由容器自己保存状态,kill直接关闭容器
三、重启一个容器

docker restart 容器ID或容器名 :不管容器是否启动,直接重启容器
1. 首先 docker ps 查看正在运行的容器信息,显示2分钟前启动运行
2. docker restart 59ec 重启容器
3. 再次 docker ps 查看容器信息 显示 2秒前启动运行

Docker安装MongoDB

Docker是近年来非常流行的虚拟化技术,这节课就不细讲了,主要用Docker 来安装MongoDB ,自动化程度较高、非常简便。
使用命令行终端登录服务器后,依次输入命令(每一行是一条命令, 一行输入完毕立即回车)执行:

1.安装Docker

  1. sudo yum -y update
  2. sudo yum -y install epel-release
  3. sudo yum -y install docker-io

2.安装MongoDB

先启动Docker

sudo systemctl start docker
sudo docker version

再安装MongoDB并启动

sudo docker pull mongo:latest
sudo docker images
sudo docker run -itd --name mongo -p 27017:27017 mongo --auth
sudo docker ps

注:27017是MongoDB服务的端口号
验证是否启动成功
执行ssh xxx.xxx.xxx.xxx登录云主机后,需要先输入命令登录进入MongoDB数据库的控制台:

sudo docker exec -it mongo mongo admin

会看到以下的界面:
image.png
光标停留在>后面,表示可以输入数据库操作命令了。
这时创建一个用户admin,密码: 123456 (仅演示, 大家自己可以设置复杂一些)。

db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]});
db.auth('admin', '123456')

每一行是一条命令,一行输入完毕立即回车。
看到系统返回结果1则表示数据库启动成功。
界面交互格式说明
必须先执行sudo docker exec -it mongo mongo admin ,以登录进入MongoDB数据库。
当看到光标停留在>后面,才能输入数据库的管理命令,以db. 开头。而回车后系统返回的信息,前面就没有箭头了。
遇到db.开头的命令,都是需要先登录进入MongoDB数据库的哦,务必牢记。

3.创建数据库

在MongoDB数据库登录状态下执行命令,创建一个practice 数据库,然后再创建一个可读写操作的用户: PPPP,密码为: 11aaa (用户名和密码不要跟本文一样,大家必须设置复杂一些) 。
数据库名称(practice)、自己设置用户名和密码很重要,以后的项目中需要配置自己的数据库,请自己记住。

use practice
db.createUser({ user:'xxxx',pwd:'xxxxxx',roles:['readWrite']});
db.auth('xxxx', 'xxxxxx')

看到系统输出switched to db practice 就表示成功了。

4.退出登录

在MongoDB数据库登录状态下执行命令,可以退出数据库。再次输入同样的命令,从云服务器退出登录。

exit

结尾提醒

安装都是一次性的, 但是要记住云主机公网IP地址、MongoDB 服务的端口号、以及practice 数据库的用户名和密码.

Docker安装Mysql

1.环境说明

本文为CentOS7.8+内核 3.10 版本+Docker1.13 版本

lsb_release -a  查询CentOS版本号
uname -a   查内核版本号
docker version  查docker版本号


2.Mysql 镜像检索

可以从 Docker Hub 上查看 所有 Mysql 的版本 ,同理也可以查询各个版本使用的详细命令
Docker学习笔记 - 图4

3.Mysql 镜像下载

docker pull mysql:5.5   拉取镜像
docker images  查看是否拉取成功

4.Mysql 容器运行

错误运行方式(千万不要采坑)

1、如下所示演示的是 Mysql 镜像运行时没有指定 密码而导致异常退出启动失败的情况

2、通过 docker logs container-name/container-id 命令 查看日志已经提醒的很明显了,必须指定 root 密码、或者允许密码为空、或者使用随机密码

[root@localhost ~]# docker logs fb1c96d110c7
error: database is uninitialized and password option is not specified 
  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

3、最后将此错误的容器停止并删除:docker stop container-id、``docker rm container-id

docker stop container-id  停止容器
docker rm container-id  删除容器
docker run --name mysql01 -d mysql:5.5  运行容器
docker ps -a  查看所有容器

正确运行方式(不完全正确,不要采坑)

1、Docker Hub 上 Mysq 官方 提供的启动命令如下所示 ,需要使用 -e 参数指定 roor 账户密码进行启动

$ docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.5

此时再用命令docker ps -a查看容器状态

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
3a896a086726        mysql:5.5           "docker-entrypoint..."   3 seconds ago       Up 2 seconds                3306/tcp            mysql01

2、如上所示,此时 mysql 容器运行是成功的,但是此时启动的 3306 端口是 Mysql 镜像在容器内部的端口,外部访问必须进行端口映射,再次停止并删除此无效的容器。

端口映射
1、端口映射加上 -p 参数即可,因为 CentOS 服务器本身外部已经安装了 Mysql 已经占用了 3306 端口,所以使用 3307 映射 Docker 容器中的 3306 端口(如果 CentOS 服务器本身外部没有装mysql,可以用3306映射)
docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -d mysql:5.5

docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 -d mysql:5.5  运行容器指定密码并且进行端口映射
netstat -ntlpu  查看端口运行情况

查看端口运行情况

[root@localhost ~]# netstat -ntlpu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1041/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1188/master         
tcp6       0      0 :::33060                :::*                    LISTEN      1308/mysqld         
tcp6       0      0 :::3306                 :::*                    LISTEN      1308/mysqld         
tcp6       0      0 :::3307                 :::*                    LISTEN      2892/docker-proxy-c 
tcp6       0      0 :::22                   :::*                    LISTEN      1041/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1188/master         
udp        0      0 0.0.0.0:68              0.0.0.0:*                           857/dhclient

查看容器是否正常启动并进行端口映射

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                    NAMES
2aad1d2a8e76        mysql:5.5           "docker-entrypoint..."   14 seconds ago      Up 14 seconds               0.0.0.0:3307->3306/tcp   mysql01
0f6df57a7fa1        tomcat:8.5.32       "catalina.sh run"        44 hours ago        Exited (143) 44 hours ago                            myTtomcat2
d67cca0aacf7        tomcat:8.5.32       "catalina.sh run"        44 hours ago        Exited (143) 43 hours ago                            myTtomcat1

2、如上所示做了端口映射后,就可以从外部访问 Docker 容器内部的 Mysql 了,但是如果要从 CentOS 服务器外部访问,则还需要 CentOS 服务器开放 3307 端口(在云服务器上配置安全组也一样)

[root@localhost ~]# firewall-cmd --zone=public --list-port
9876/tcp 8090/tcp 80/tcp 8080/tcp
[root@localhost ~]# firewall-cmd --zone=public --add-port=3307/tcp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --zone=public --list-port
9876/tcp 8090/tcp 80/tcp 8080/tcp 3307/tcp

5.连接测试

1.
通过命令

mysql -h localhost -u root -p

输入密码连接数据库,或命令

mysql -h 127.0.0.1-u root -p

image.png

2.如下所示,从 Windows 上使用 Navicat 连接虚拟机 CentOS 中 Docker 中的 Mysql

image.png