创建一个新的 Docker 虚拟机
测试环境为Mac
docker-machine create --driver virtualbox default
这就在 VirtualBox 中创建了一台新的default
虚拟机。
该命令还会在~/.docker/machine/machines/default
目录下生成一个 docker machine 的配置文件。只需执行一次create
命令,然后可以使用docker-machine
命令来开启,停止,查询并管理虚拟机。
列出所有可用的 docker machine
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
default * virtualbox Running tcp://192.168.99.101:2376
获取default
虚拟机的环境变量
$ docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.101:2376"
export DOCKER_CERT_PATH="/Users/mary/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval "$(docker-machine env default)"
连接到Docker VM
docker-machine ssh default
也可以在宿主机上通过ssh连接
ssh docker@192.168.99.100
user: docker
pass: tcuser
设置Docker默认镜像服务器
在/etc/docker/daemon.json添加以下配置,修改保存后重启 Docker 以使配置生效
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
查看docker镜像
docker@default:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.c.163.com/library/tomcat latest 72d2be374029 3 months ago 292MB
运行docker镜像,将docker容器的8080端口映射到宿主机的8888端口上
docker run -i -t -p 8888:8080 72d2be374029
删除镜像
docker rmi ed9c93747fe1
若镜像有运行的容器则无法删除
查看运行的docker实例
docker@default:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1f68cb2ef5ee 72d2be374029 "catalina.sh run" 48 seconds ago Up 47 seconds 0.0.0.0:8888->8080/tcp modest_goldwasser
8409934c431d 72d2be374029 "catalina.sh run" 14 minutes ago Up 14 minutes 0.0.0.0:8088->8080/tcp practical_shirley
登录docker容器
docker exec -i -t 1f68cb2ef5ee /bin/bash
停止docker容器
docker stop --time=20 container_name
docker stop命令执行的时候,会先向容器中PID为1的进程发送系统信号SIGTERM,然后等待容器中的应用程序终止执行,如果等待时间达到设定的超时时间,或者默认的10秒,会继续发送SIGKILL的系统信号强行kill掉进程。在容器中的应用程序,可以选择忽略和不处理SIGTERM信号,不过一旦达到超时时间,程序就会被系统强行kill掉,因为SIGKILL信号是直接发往系统内核的,应用程序没有机会去处理它。在使用docker stop命令的时候,唯一能控制的是超时时间.
docker kill --signal=SIGINT container_name
与docker stop命令不一样的地方在于,docker kill没有任何的超时时间设置,它会直接发送SIGKILL信号,以及用户通过signal参数指定的其他信号。
docker stop命令,更类似于Linux系统中的kill命令,二者都是发送系统信号SIGTERM。而docker kill命令,更像是Linux系统中的kill -9或者是kill -SIGKILL命令,用来发送SIGKILL信号,强行终止进程。
查看容器的信息
docker ps
命令可以查看容器的CONTAINER ID、NAME、IMAGE NAME、端口开启及绑定、容器启动后执行的COMMNAD。经常通过ps来找到CONTAINER_ID。docker ps
默认显示当前正在运行中的containerdocker ps -a
查看包括已经停止的所有容器docker ps -l
显示最新启动的一个容器(包括已停止的)
查看docker容器的IP地址
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' 1f68cb2ef5ee
查看日志
docker logs 1f68cb2ef5ee
跟踪日志,类似 tail -f xxx.log 可以通过ctrl+c
退出查看日志
docker logs -f 1f68cb2ef5ee
Docker统计信息
docker@default:~$ docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
1f68cb2ef5ee modest_goldwasser 0.13% 71.8MiB / 995.7MiB 7.21% 828B / 0B 1.2MB / 0B 41
8409934c431d practical_shirley 0.13% 69MiB / 995.7MiB 6.93% 648B / 0B 69.6kB / 0B 43
深入容器
docker inspect 1f68cb2ef5ee
删除容器
docker rm e6dd317561da
可以通过参数 -f 强制删除运行中的容器。
删除所有容器
docker rm 'sudo docker ps -a -q'
docker ps命令会列出所有运行的容器,-a表示列出所有容器,-q表示只需要返回容器的ID
Docker安装Mysql
## 创建mysql本地存储目录
mkdir -p ~/mysql/data
docker run -p 3306:3306 --name mysql -v ~/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d hub.c.163.com/library/mysql:5.6
-p 3306:3306 是将docker 的3306端口映射到本机3306 端口
-v ~/mysql/data:/var/lib/mysql 是将docker的/var/lib/mysql 文件夹映射到本机的/mysql/data
-e MYSQL_ROOT_PASSWORD=123456 输入密码,mysql原始密码为123456
通过Dockerfile安装Mysql
Mysql官方提供了安装Mysql的Dockerfile,地址https://github.com/mysql/mysql-docker,这里选择8.0版本,一共三个文件
在default虚拟机上的docker用户目录下新建一个文件夹mysql,然后将这三个文件放在mysql文件夹下。进入mysql文件夹,执行以下命令即可构建一个新的镜像。
sudo docker build -t="test/mysql" .
build成功后使用docker images命令即可插件镜像
docker@default:~/mysql8$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/mysql latest 5320750e685d 2 hours ago 295MB
构建镜像后即可通过docker run命令来启动,需要在启动参数中设置mysql的密码。
docker run -e MYSQL_ROOT_PASSWORD=123456 5320750e685d