学习docker,首先必须知道仓库,镜像和容器的概念,仓库(Repository)是集中存放镜像的地方,镜像是打包的应用和文件系统,我们将镜像从仓库下载到本地,通过镜像来创建容器。我们可以使用docker --help来初步了解docker命令
一、设置仓库
1、安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
yum install -y yum-utils device-mapper-persistent-data lam2
2、使用以下命令来设置稳定的仓库
(中央仓库)yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
(阿里仓库)yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
二、安装 Docker Engine-Community
1、安装最新版本的 Docker Engine-Community 和 containerd,或者转到下一步安装特定版本:
yum install -y docker-ce
2、查看docker版本
docker -v
三、Docker 安装完默认未启动。并且已经创建好 docker 用户组,但该用户组下没有用户。
要安装特定版本的 Docker Engine-Community,请在存储库中列出可用版本,然后选择并安装:
1、列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。
yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:19.03.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.7-3.el7 docker-ce-stable
2、通过其完整的软件包名称安装特定版本,
yum install -y docker-ce-19.03.8
3、启动docker
systemctl start docker
4、Docker 镜像加速
Ubuntu16.04+、Debian8+、CentOS7
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):
{"registry-mirrors":["https://hd86vhxg.mirror.aliyuncs.com"]}
之后重新启动服务:
systemctl daemon-reload
systemctl restart docker
5、检查加速器是否生效
ntpdate cn.pool.ntp.org
docker info
6、查看镜像
docker images #查看所有镜像
docker images -q #查看所有镜像ID
7、搜索镜像
docker search 镜像名称
8、下载镜像
docker pull 镜像名称:版本号
具体版号本官网hub.docker.com查找
9、删除镜像
docker rmi ID
docker rmi 镜像名称:版本号
10、删除所有镜像
docker rmi `docker images -q`
11、创建容器
docker run -it --name=cityhousedown centos:7 /bin/bash
docker run -id --name=cityhouseup centos:7 /bin/bash
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。。
-d:以后台方式运行容器
-it:创建容器为交互式容器,退出容器后,容器自动关闭
-id:创建容器为守护式容器。退出容器后,容器不会关闭
--name:为创建的容器命名
-p 8081:8080 8081为服务器对外IP,8080为容器内部IP
-v /data:/App /data为服务器目录,/App为容器内部目录
--restart=always 容器开机启动
如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像
查看运行容器
docker ps #查看运行容器
docker ps -a #查看所有容器
docker ps -l #查询最后一次创建的容器
12、进入容器
docker attach 1e560fca3906 注意: 如果从这个容器退出,会导致容器的停止。
docker exec -it ID/容器名 /bin/bash #退出容器终端,不会导致容器的停止。
13、停止容器
docker stop ID/容器名
14、启动一个已停止的容器
docker start ID/容器名
15、重启容器
docker restart ID/容器名
16、删除容器
docker rm ID/容器名
docker rm `docker ps -aq` #删除全部容器。正在运行的容器不能删除
docker container prune #清理掉所有处于终止状态的容器
删除容器时,容器必须是停止状态,否则会报如下错误
Error response from daemon: You cannot remove a running container d58b840063c3ef86c7ea034b080217615e231d021adbab83114ba7e3b084be7d. Stop the container before attempting removal or force remove
17、查看容器信息
docker inspect ID/容器名
18、导出容器快照
docker export ID/容器名 > 包名.tar
四、部署应用
1、部署MySQL
(1)、拉取镜像
docker search mysql:5.6 docker pull mysql:5.6
(2)、创建容器,设置端口映射、目录映射
docker run -id -p 3306:3306 --name=mysql -v /data/mysql/conf:/etc/mysql/conf.d -v /data/mysql/logs:/var/logs/mysql -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
2、部署tomcat
docker search tomcat
docker pull tomcat
创建容器,设置端口映射、目录映射
docker run -id -p 8080:8080 --name=tomcat -v /data/tomcat/webapps:/usr/local/tomcat/webapps tomcat
3、部署nginx
(1)、下拉镜像
docker search nginx
docker pull nginx
(2)、创建容器
docker run -id --name=nginx -p 80:80 -v /data/nginx/conf.d:/etc/nginx/conf.d -v /data/nginx/logs:/var/log/nginx -v /data/nginx/html:/usr/share/nginx/html nginx
(3)、部署完需要重启docker
systemctl restart docker
(4)、tag标记
docker tag tomcat tomcattag
五、搭建私有仓库
1、拉取
docker pull registry
2、创建容器
docker run -id --name=registry -p 5000:5000 registry
3、修改文件
vim /etc/docker/daemon.json
{"insecure-registries":["http://10.11.2.92:5000"]}
4、重启docker
systemctl daemon-reload
systemctl restart docker
docker start registry
5、浏览器访问
http://10.11.2.92:5000/v2/_catalog,看到{"repositories":[]}表示私有仓库搭建成功
六、镜像上传到私有仓库
1、标记镜像为私有仓库的镜像(给镜像添加一个带有私有仓库IP的TAG,这样后面才能成功推送到私有仓库)
docker tag centos:7 10.11.2.92:5000/centos:7
docker tag 镜像名:版本号(或ID) 新镜像名称:版本号
2、上传标记的镜像
docker push 10.11.2.92:5000/centos:7
docker push 后镜像名称:版本号
3、访问 curl http://10.11.2.92:5000/v2/_catalog
{"repositories":["centos"]}
拉取私有镜像
docker pull 10.11.2.92:5000/centos:7
七、容器导入导出
1、导出容器
docker export fb2ad3099e1e > /root/mysql.tar.gz
2、导入容器为镜像
cat mysql.tar.gz |docker import - mysql11