docker的基本使用
前几天学了一下docker,一方面是记录一下这些命令,另一方面为了复习一下,所以写了下面这些!有什么问题还请指正!
在Linux中下载docker
CentOS
1 | yum install docker |
ubunte
1 | apt-get install docker.io |
找不到包的话update一下
CentOS
yum update
Ubuntu
apt-get update
更换docker镜像源
在/etc/docker/
目录下修改或者新建daemon.json
文件
1 | { |
Docker国内其他源:
Docker 官方中国区
https://registry.docker-cn.com
网易
中国科技大学
https://docker.mirrors.ustc.edu.cn
阿里云的源需要注册,我没有去折腾
镜像相关的命令
搜索镜像
1 | docker search 镜像名 |
这个没什么好说的,就是根据你给出的镜像名列出仓库中有的相关的镜像
可以加条件 -s star数
比如docker search -s 50 mysql
就是star数在50K以上的镜像才会被列出来
等于就是增加搜索的条件,还有其他的参数可以自己查
从仓库pull镜像
这个命令就和git的pull差不多意思,git pull拉的是代码;docker pull拉的是镜像
1 | docker pull 镜像名:版本号 |
比如拉MySQL的镜像:docker pull mysql
删除一个镜像
1 | docker rmi 镜像名或ID |
打包镜像
将镜像打包,方便移植到其他设备运行
1 | docker save -o 打包后的名字.tar 镜像名 |
导入打包的镜像
1 | docker load < 包名 |
容器操作
由镜像创建一个容器并运行
这里就以mysql为例:
1 | docker run -di --name=mysql -p 3306:3306 -e TZ=Asia/Shanghai MYSQL_ROOT_PASSWORD=123456 mysql --lower_case_table_names=1 |
mysql的参数比较多一点
-d表示后台运行
-i表示交互式的操作(我也不太明白什么意思,后面弄明白了再更新)
–name是给生成的容器取名字
-p是端口的映射,冒号前面的是宿主机的端口,后面的是容器中的端口,意思就是容器中3306的端口映射到宿主机的3306端口,直接访问宿主机的3306端口就可以访问到docker中的MySQL。如果要在宿主机直接连接MySQL,可以ip a看一下docker的在宿主机的ip,然后通过那个ip的3306端口就可以访问了
MYSQL_ROOT_PASSWORD 这个是这只mysql的root用户密码
–lower_case_table_names=1 这个是不区分表的大小写,当初就是应为这个才入了docker的坑,直接在服务装的MySQL打死改不了这个大小写不敏感,一个项目里面刚好有有很多表是大写,数据库里面是小写的,我就是不想改成小写(傲娇脸),然后折腾几天都没能改好,后来就考虑了docker。在Windows下运行没问题,因为Windows本来就不区分大小写,到Linux下面就区分大小写了,项目部署 好久,都没能跑起来,报错找不到表,我当时还莫名其妙,明明有这个表怎么找不到呢,后来发现了这个坑。
运行Tomcat就简单些:
1 | docker run -dp 8080:8080 tomcat镜像ID |
上面都是在后台运行的,如果想要直接在
停止容器的运行
1 | docker stop 容器名 |
启动创建的镜像
1 | docker start 容器名 |
重启就是restart啦
进入到容器中
一个容器其实就是一个小的Linux环境,但是做了很多精简,只保留了必要的部分
有两种方式:
第一种:docker attach 容器名字或者ID
第二种:docker exec -it 容器名或ID /bin/bash
这两个的区别,如果第一种方式进去在exit,那会退出并且停止容器的运行,第二种exit不会停止运行
删除一个容器
1 | docker rm 容器名或ID |
由容器创建一个镜像
你从远程仓库拉的默认镜像,经过个性化的配置之后,就可以这样创建一个自己的镜像,然后在把镜像打包成压缩包,传到其他设备,导入之后就又可以在其他设备运行了
1 | docker commit -a 这个镜像的作者 -m 提交时候的文字说明 容器名 创建的镜像名 |
查看容器
1 | docker ps -aq |
什么都不加就只会列出当前正在运行的容器
加上-a
是列出所有的镜像,-q
表示静默模式,只显示容器编号
docker rm (docker ps -aq)
这个组合命令就是删除所有的容器