安装Docker
环境准备
1,需要会一点点的Linux基础
2,CentOS 7
3,我们使用Xshell 连接远程服务器进行操作!
环境查看
# 系统内核是 3.10 以上的
[root@iZj83aen795zmfZ ~]# uname -r
3.10.0-514.26.2.el7.x86_64
# 系统版本
[root@iZj83aen795zmfZ ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
Docker 安装
# 1,卸载旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 2,需要的安装包
yum install -y yum-utils
# 3,设置镜像的仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 推荐使用阿里云的,十分的快
# 更新yum软件包索引
yum makecache fast
# 4,安装docker docker-ce 社区版 ee 企业版
yum install docker-ce docker-ce-cli containerd.io
# 5,启动docker
sudo systemctl start docker
# 6,测试是否安装成功
docker version
# 7,hello-world
docker run hello-world
# 8,查看一下下载的这个 hello-world
sudo docker images
了解:卸载docker
# 1,卸载docker
yum remove docker-ce docker-ce-cli containerd.io
#2,删除资源
rm -rf /var/lib/docker
# /var/lib/docker docker的默认工作路径!
阿里云镜像加速
1,登录阿里云找到容器服务
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y6p7tTZo-1594604193582)(C:\Users\25775\AppData\Roaming\Typora\typora-user-images\image-20200609104010285.png)]
2,找到镜像加速地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EIGuh70U-1594604193585)(C:\Users\25775\AppData\Roaming\Typora\typora-user-images\image-20200609104132356.png)]
3,配置使用
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://qbcjgfqj.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
回顾 Hello world流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RAuOoeWe-1594604193586)(C:\Users\25775\AppData\Roaming\Typora\typora-user-images\image-20200609105004733.png)]
Docker的常用命令
帮助命令
docker version # 显示docker版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令
帮助文档的地址:https://docs.docker.com/engine/reference/commandline/
镜像命令
查看镜像
[root@iZj83aen795zmfZ ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 5 months ago 13.3kB
# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
# 可选项
-a, --all # 列出所有的镜像
-q, --quiet # 只显示镜像的id
docker search 搜索镜像
[root@iZj83aen795zmfZ ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9597 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3489 [OK]
# 可选项,通过搜索来过滤
--filter=STARS=3000 # 搜索出来的镜像就是STARS大于3000的
**docker pull **下载镜像
# 下载镜像 docker pull 镜像名[:tag]
[root@iZj83aen795zmfZ ~]# docker pull mysql
Using default tag: latest # 如果不写 tag,默认就是 latest
latest: Pulling from library/mysql
8559a31e96f4: Pull complete # 分层下载,docker images的核心 联合文件系统
d51ce1c2e575: Pull complete
c2344adc4858: Pull complete
fcf3ceff18fc: Pull complete
16da0c38dc5b: Pull complete
b905d1797e97: Pull complete
4b50d1c6b05c: Pull complete
c75914a65ca2: Pull complete
1ae8042bdd09: Pull complete
453ac13c00a3: Pull complete
9e680cd72f08: Pull complete
a6b5dc864b6c: Pull complete
Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6 # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
# 等价于它
docker pull mysql
docker pull docker.io/library/mysql:latest
# 指定版本下载
[root@iZj83aen795zmfZ ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
8559a31e96f4: Already exists
d51ce1c2e575: Already exists
c2344adc4858: Already exists
fcf3ceff18fc: Already exists
16da0c38dc5b: Already exists
b905d1797e97: Already exists
4b50d1c6b05c: Already exists
d85174a87144: Pull complete
a4ad33703fa8: Pull complete
f7a5433ce20d: Pull complete
3dcd2a278b4a: Pull complete
Digest: sha256:32f9d9a069f7a735e28fd44ea944d53c61f990ba71460c5c183e610854ca4854
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
**docker rmi **删除镜像
docker rmi -f 容器id # 删除指定的容器
docker rmi -f 容器id 容器id 容器id # 删除多个容器
docker rmi -f $(docker images -aq) # 删除全部容器
容器命令
说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习
新建容器并启动
docker pull centos
docker run [可选参数] image
# 参数说明
--name="Name" # 容器名字
-d # 后台方式运行
-it # 使用交互方式运行,加入容器查看内容
-p # 指定容器的端口 -p 8080:8080
-p # ip:主机端口:容器端口
-p # 主机端口:容器端口(常用)
-p # 容器端口
容器端口
-P # 随机指定端口
# 测试,启动并进入容器
[root@iZj83aen795zmfZ ~]# docker run -it centos /bin/bash
[root@339ebca40b44 /]# ls # 查看容器内的centos
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
#从容器中退回主机
exit
列出所有的运行的容器
docker ps # 运行中的容器
-a # 列出当前正在运行的容器+ 带出历史运行过的容器
-n=? # 显示最近创建的容器
-q # 只显示容器的编号
退出容器
exit # 直接容器停止并退出
Ctrl + P + Q # 容器不停止退出
删除容器
docker rm 容器id # 删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq) # 删除所有的容器
docker ps -a -q|xargs docker rm # 删除所有的容器
启动和停止容器的操作
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器
常用其他命令
后台启动容器
# 命令 docker run -d 镜像名!
docker run -d centos
# 问题docker ps,发现 centos 停止了
# 常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker 发现没有应用,就会自动停止
# nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
# 后台启动
docker run -it centos /bin/bash
查询日志
docker logs -f -t --tail 容器 #没有日志
# 自己编写一段shell脚本
docker run -d centos /bin/sh -c "while true;do echo qianjue;sleep 1;done"
# 显示日志
docker logs -tf --tail 10 69c8a0b7ab70
-tf # 显示日志
--tail number # 要显示日志条数
查看容器中的进程信息
# 命令 docker top 容器id
docker top 69c8a0b7ab70
UID PID PPID C STIME TTY TIME CMD
root 11241 11222 0
查看镜像的元数据
# 命令
docker inspect 容器id
#测试
[root@iZj83aen795zmfZ ~]# docker inspect 69c8a0b7ab70
[
{
"Id": "69c8a0b7ab7033c47f1f198eba833afe03167cc4262dfc2cde1d219010cb34a6",
"Created": "2020-06-10T09:14:50.736664535Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo qianjue;sleep 1;done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 11241,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-06-10T09:14:51.076652595Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:470671670cac686c7cf0081e0b37da2e9f4f768ddc5f6a26102ccd1c6954c1ee",
"ResolvConfPath": "/var/lib/docker/containers/69c8a0b7ab7033c47f1f198eba833afe03167cc4262dfc2cde1d219010cb34a6/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/69c8a0b7ab7033c47f1f198eba833afe03167cc4262dfc2cde1d219010cb34a6/hostname",
"HostsPath": "/var/lib/docker/containers/69c8a0b7ab7033c47f1f198eba833afe03167cc4262dfc2cde1d219010cb34a6/hosts",
"LogPath": "/var/lib/docker/containers/69c8a0b7ab7033c47f1f198eba833afe03167cc4262dfc2cde1d219010cb34a6/69c8a0b7ab7033c47f1f198eba833afe03167cc4262dfc2cde1d219010cb34a6-json.log",
"Name": "/nostalgic_hodgkin",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig":