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
想要删除untagged images,也就是那些id为的image的话可以用
docker rmi $(docker images | grep “^” | awk “{print $3}”)
3)删除全部的images
docker rmi $(docker images -q)
3、当要删除的iamges和其他的镜像有关联而无法删除时
可通过 -f 参数强制删除
docker rmi -f $(docker images -q)
docker常规操作——启动、停止、重启容器实例
一、启动一个已经停止的容器实例
docker start 容器ID或容器名
- 先查看已经暂停的容器实例信息
- 通过docker start 59ec 启动容器
- 通过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
sudo yum -y updatesudo yum -y install epel-releasesudo 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
会看到以下的界面: 
光标停留在>后面,表示可以输入数据库操作命令了。
这时创建一个用户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 的版本 ,同理也可以查询各个版本使用的详细命令
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

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

