天天看点

关于Manjaro下Docker的使用

笔者初次接触docker,在下面介绍下自己的一些心得,如有错误希望能及时指正。

先简单介绍一下docker,我们自己在做一些小项目的时候想在其他人的主机上运行很容易遇到安装环境不同导致项目无法运行的情形,或者自己在学习新技术的时候配置环境可能会出现一些难搞的错误,这时使用docker可以很容易的化解这些问题。

docker采用了一种集装箱的思想,每一个内容都封闭在一个集装箱内,在一般情况下不同的集装箱之间互不干涉,使用集装箱内的内容只需要运行某个集装箱就可以。使用时需要拉取一个叫镜像的东西(可以把它理解为我们安装虚拟机时下载的那个镜像),这个镜像内包含了想要使用的全部内容,通过运行镜像创造一个容器(容器类似于虚拟机系统)。通过使用容器,完成镜像内项目的运行。

#Manjaro下安装docker是非常方便的,只需要一行

yay -S docker
           

然后启动docker

systemctl start docker
           

如果想开机自启动docker的话

systemctl enable docker
           

下面通过以使用mysql镜像为例,简单演示docker的使用方法。

我们使用mysql需要拉取mysql的镜像,docker拥有默认的中央仓库,不过不使用代理速度会比较慢,推荐大家从

http://hub.daocloud.io/ 获取镜像源

关于Manjaro下Docker的使用
关于Manjaro下Docker的使用
关于Manjaro下Docker的使用

复制拉取命令,然后运行

sudo docker pull daocloud.io/library/mysql:5.7.4
           

等待pull complete,输入

docker images
           

可以查看当前拉取过的所有镜像,每个镜像都有一个id,

关于Manjaro下Docker的使用

删除某个镜像只需要运行

sudo docker rmi [镜像id]
#例如 sudo docker rmi 0d  //这里删除redis镜像只用了0d是因为前两位没有重复的,docker支持这种
						 //删除方式,当然也可以写全id
           

此时只是相当于下载完一个系统镜像,想要使用"虚拟机"当然要安装这个镜像产生一个容器

sudo docker run -d -p 宿主机端口号:容器内端口号 --name  自定义容器名称  镜像id||镜像名称:tag
#mysql比较特殊,需要加一个命令设置初始密码
#例如  
#sudo docker run -d -p 3306:3306 --name mysql-5.7.4 -e MYSQL_ROOT_PASSWORD=mysql 0d 
# -d 代表后台运行 -p 是设置端口号 --name 是设置容器名称 -e是和后面的命令是设置初始密码为mysql 
           

运行命令

sudo docker ps 
           

可以查看当前运行的容器 ps 后可以加参数-a 查看当前创建的所有容器

停止容器命令

sudo docker stop 容器id
           

启动容器命令

sudo docker start 容器id
           
关于Manjaro下Docker的使用

看到这可能有人会想,我怎么才能使用这个docker中的mysql呢?其实现在通过端口映射,mysql已经相当于安装在宿主机上了,只要将sql文件导入容器内,本地项目可以正常操作数据库。

如何导入sql文件呢?有两种方法,一种是通过docker cp命令将本地文件复制到容器内,然后进入容器进入mysql命令行,使用source命令释放sql文件中的内容;另外一种是通过数据卷的方式,直接将容器内的某个空文件映射到宿主机的某个空文件,通过对宿主机空文件内添加文件,实现对容器添加文件。

下面介绍第一种方式,

sudo docker exec -it 容器id bash //进入容器命令
           
关于Manjaro下Docker的使用

可以看到容器类似于一个linux虚拟机,可以在该容器内使用linux命令,上图举例进入了mysql命令行。

回到宿主机环境。运行

sudo docker cp 文件路径 容器id:容器内部路径
#例如 sudo docker cp ~/xxx.sql c7:/usr/local/mysql/
           

将本地home目录下的xxx.sql文件复制到c7开头的容器的/usr/local/mysql/目录下

通过上图命令再次进入容器内mysql命令行下,进行创建数据库,释放sql文件内容。

本地通过workbench连接localhost:3306 看到是可以正常访问数据库内容的。

关于Manjaro下Docker的使用

有时间会再介绍一下个人理解的 如何进行通过数据卷添加文件和自定义镜像实现项目工程及其环境的封装。