四月 9, 2018

Docker

基本指令

在没有接触Docker之前,如果要玩Linux系统,你有两个选择,直接全新装一个linux系统,或者装一个linux虚拟机。为了方便我们很可能会安装虚拟机,但是虚拟机也有问题,内存、CPU、硬盘等需要提前分配,如果要实现虚拟机的目录跟宿主机的目录实现共享,还需要比较麻烦的配置。最恶心的的一点是,作为一个linux新手,在linux系统上安装软件其实是一件比较很有挑战性的事情,一不小心软件就装错了软件,要么版本不对,要么装了没法用,在网上找了一堆的教程,通过摸索,总结了一些使用心得。

明白一个概念

运行一个容器,并且对容器进行某种操作以后就是修改了容器,比如,运行了一个ubuntu容器,在ubuntu里面安装了一些软件和工具,这时候就是对容器做了修改,这样的修改在退出或者关闭容器后就不会保存下来,因此需要将修改通过docker指令重新保存。

镜像

启动和停止

1.查看镜像

docker images

2.查看运行中的容器

docker ps -all

3.查看正在运行容器的详细信息

docker inspect [CONTAINER ID(指令2可以获取id)]

4.停止容器

 docker stop [CONTAINER ID]

5.端口映射。参考链接

docker run -p ip:hostPort:containerPort -t -i ubuntu /bin/bash

使用-p参数会分配宿主机的端口映射到虚拟机。
IP表示主机的IP地址。
hostPort表示宿主机的端口。
containerPort表示虚拟机的端口。

支持的格式有三种:
ip:hostPort:containerPort:映射指定地址的指定端口到虚拟机的指定端口(不常用) 
如:127.0.0.1:3306:3306,映射本机的3306端口到虚拟机的3306端口。 
ip::containerPort:映射指定地址的任意端口到虚拟机的指定端口。(不常用) 
如:127.0.0.1::3306,映射本机的3306端口到虚拟机的3306端口。 
hostPort:containerPort:映射本机的指定端口到虚拟机的指定端口。(常用) 
如:3306:3306,映射本机的3306端口到虚拟机的3306端口。

6.文件共享。就是将宿主机的目录共享给docker,这样当docker运行的过程产生的数据可以直接保存到宿主机的共享目录,就算docker退出也不会丢失数据。参考链接

docker run -v /home/dock/Downloads:/usr/Downloads -t -i ubuntu /bin/bash

通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。

7.链接容器。如果一个容器已经在运行中,可以使用如下命令链接上去。好比同时启动多个命令行控制台

docker exec -i -t [ContainerID ] /bin/bash

安装镜像

1.查找镜像

docker search [镜像名,比如:ubuntu]

1.拉取ubuntu镜像 参考链接

docker run daocloud.io/ubuntu:14.04 grep -v '^#' /etc/apt/sources.list

2.命令行启动ubuntu镜像
2.1 将一个镜像重命名为ubuntu运行

docker run --name ubuntu -i -t ubuntu /bin/bash

/bin/bash 就是用来做命令行启动的。 其中, -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。用--name给他指定了一个名(不指定的话会生成一个随机的名子)。

2.2 直接运行ubuntu容器(上一步已经命名为ubuntu)

docker run -t -i ubuntu /bin/bash

3 保存容器

sudo docker commit [CONTAINER ID] [新的镜像名称]

保存过后,就可以使用docker imgaes 指令看到新的镜像名称了

4.完整的运行指令(端口映射,目录共享)

docker run -v /Users/xxxxx/Documents/www:/home/web -p 8090:80 -t -i ubuntu /bin/bash

删除 Docker 容器和镜像

1.删除所有未运行 Docker 容器

docker rm $(docker ps -a -q)

2.删除所有镜像

docker rmi $(docker images -q)

3.删除所有未打 tag 的镜像

docker rmi $(docker images -q | awk '/^<none>/ { print $3 }')

4.根据格式删除所有镜像

docker rm $(docker ps -qf status=exited)

5.删除某个容器

docker rm [CONTAINER ID]

6.删除某个镜像

docker rmi [镜像名]

docker容器的导入和导出

参考链接
1.导出

docker export [CONTAINER ID] > ubuntu.tar

这行命令就是将某个容器导出成一个ubuntu.tar文件到当前目录下。这样你就可以把这个文件移动到任何一台电脑上了

2.导入
先进入存放ubuntu.tar的目录。然后执行以下命令

cat ubuntu.tar | sudo docker import - test/ubuntu:v1.0

这样一个容器就导入完成。可以使用docker images 查看了。

注意事项

1.在docker中安装mysql 之前,先退出docker,然后再启动容器,启动的时候做文件共享。mysql的数据文件在 /var/lib/mysql目录下,因此在启动前 使用 -v /Users/XXXX/Documents/docker/data:/var/lib/mysql参数来共享目录。重点是一定要共享目录,如果在安装之前没做这不操作,等安转完以后再共享目录,那么后续启动mysql的时候就有可能无法启动。

发表评论

电子邮件地址不会被公开。 必填项已用*标注