centos7以及以上+内核3.10
帮助文档地址:https://docs.docker.com/reference/
1-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
systemctl start docker
# 6.查看docker版本
docker version
# 7.hello-world
docker run hello-world
# 8.查看下载的hello-world镜像
docker images
#设置为开机启动
[root@docker01 ~]# systemctl start docker
[root@docker01 ~]# systemctl enable docker
2-docker的卸载
#了解卸载docker
# 1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 2.删除资源
rm -rf /var/lib/docker #docker默认工作路径
rm -rf /var/lib/containerd
3-阿里云镜像加速
# 1.第一步
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://po1qcvly.mirror.aliyuncs.com"]
}
EOF
# 2.第二步
sudo systemctl daemon-reload
# 3.第三步
sudo systemctl restart docker
4-docker常用命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息 包括镜像和容器的数量
docker 命令 --help #万能命令 eg: docker images --help
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 4 months ago 13.3kB
#解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
-a, --all 列出所有的镜像
-q, --quiet 只显示镜像的Id
4.1-镜像命令
#搜索mysql镜像
docker search mysql
#可选项,通过搜藏来过滤
--filter =stars=3000 #搜索出来的镜像就是stars大于3000
docker search mysql --filter =stars=3000
#下载镜像
docker pull 镜像名[:tag]版本默认最新版
[root@localhost /]# docker pull mysql
Using default tag: latest #如果不写tag 默认就是latest
latest: Pulling from library/mysql
b4d181a07f80: Pull complete #分层下载,docker iamge的核心 联合文件系统
a462b60610f5: Pull complete
578fafb77ab8: Pull complete
2f40c47d0626: Pull complete
Digest: sha256:52b8406e4c32b8cf0557f1b74517e14c5393aff5cf0384eff62d9e81f4985d4b#签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
#等价于
docker pull mysql === docker pull docker.io/library/mysql:latest
#指定版本下载
[root@localhost /]# docker pull mysql:5.7
#删除指定ID镜像
docker rmi -f 镜像ID
#删除指定ID镜像 (多个)
docker rmi -f 镜像ID 镜像ID 镜像ID 镜像ID
#递归删除所有镜像(意思是全部镜像的id)
docker rmi -f $(docker images -aq)
4.2-容器命令
#列出当前在运行的容器
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#查看曾经运行过的容器
[root@localhost /]# docker ps -a
#################删除容器
docker rm 容器id #删除指定容器,不能删除正在运行的容器
docker rm -f $(docker ps -aq) #删除所有容器【方式1】
docker ps -a -q|xargs docker rm #删除所有容器【方式2】
#################启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启动容器
docker stop 容器id #停止当前正在运行动容器
docker kill 容器id #强制停止当前容器
docker inspect 容器id #查看容器的信息
#显示日志-tf #显示日志 f带上时间--tail number #要显示的日志条数
docker logs -tf --tail 10 容器id
5-容器数据卷
为了实现数据持久化,使容器之间可以共享数据。可以将容器内的目录,挂载到宿主机上或其他容器内,实现同步和共享的操作。即使将容器删除,挂载到本地的数据卷也不会丢失。
6-docker实战
6.1-docker安装mysql5.7
[root@localhost ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
b380bbd43752: Pull complete
# --name指定容器名字
#-v目录挂载 (冒号左边是宿主机目录,右边是容器目录)
#-p指定端口映射 (冒号左边是宿主机端口,右边是容器内部端口)
#-e设置mysql参数 (e:环境变量)
#-d后台运行
#mysql:5.7镜像名称
[root@localhost ~]# docker run -p 3306:3306 --name mysql \
> -v /ycmydata/mysql57:/var/log/mysql \
> -v /ycmylogs/mysql57:/var/lib/mysql \
> -v /ycmyconfig/mysql57:/etc/mysql \
> -e MYSQL_ROOT_PASSWORD=root \
> -d mysql:5.7
af8e283c81fc9fa13c822bfa1c68997e2b7d5ce286949564469f701896569a87
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
af8e283c81fc mysql:5.7 "docker-entrypoint.s…" 55 seconds ago Up 54 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
###在ycmyconfig/mysql57创建文件my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
# 重新启动mysql
[root@localhost ~]# docker restart mysql
mysql
# 配置mysql开机启动
[root@localhost ~]# docker update mysql --restart=always
6.2-docker安装redis6.2
##创建目录/ycmydata/redis62 /ycmylogs/redis62 /ycmyconfig/redis62
##如果直接挂载的话docker会以为挂载的是一个目录,所以我们先创建一个文件然后再挂载,在虚拟机中
[root@localhost ~]# touch /ycmyconfig/redis62/redis.conf
[root@localhost ~]# docker pull redis:6.2
6.2: Pulling from library/redis
7d63c13d9b9b: Pull complete
[root@localhost ~]# docker run -p 6379:6379 --name redis \
> -v /ycmydata/redis62:/data \
> -v /ycmyconfig/redis62/redis.conf:/etc/redis/redis.conf \
> -d redis:6.2 redis-server /etc/redis/redis.conf
63ca4766a5912699736175c937bee9103f178bf790e4efe6301e8903aa6d59c6
[root@localhost ~]#
##编辑外部挂在的配置文件/ycmyconfig/redis62/redis.conf 设置持久化
[root@localhost redis62]# vi redis.conf
# 插入下面内容
appendonly yes
保存
##修改配置文件后,重新启动redis
[root@localhost ~]# docker restart redis
redis
##设置docker容器启动后启动redis
[root@localhost ~]# docker update redis --restart=always
redis
6.3-docker安装nginx1.10
[root@localhost ~]# docker pull nginx:1.10
1.10: Pulling from library/nginx
6d827a3ef358: Pull complete
1e3e18a64ea9: Pull complete
556c62bb43ac: Pull complete
Digest: sha256:6202beb06ea61f44179e02ca965e8e13b961d12640101fca213efbfd145d7575
Status: Downloaded newer image for nginx:1.10
docker.io/library/nginx:1.10
##启动容器目的是拷贝配置文件到外部文件夹
[root@localhost ~]# docker run -p 80:80 --name nginx -d nginx:1.10
ce2458201cc6ab43880c2fe1cb9956b5fcdf7bfcc7803ff609ee05bfd78f7c15
##创建目录/ycmyconfig/nginx110
[root@localhost ycmyconfig]# cd nginx110/
##拷贝nginx配置文件到/ycmyconfig/nginx110的nginx目录下
###docker container cp nginx[容器的名称]:/etc/nginx .
[root@localhost nginx110]# docker container cp nginx:/etc/nginx .
###将/ycmyconfig/nginx110/nginx 重命名为 /ycmyconfig/nginx110/conf
[root@localhost nginx110]# mv nginx/ conf/
##停止容器
[root@localhost ~]# docker stop nginx
nginx
##删除容器
[root@localhost ~]# docker rm nginx
nginx
##创建两个目录 /ycmydata/nginx110/html;/ycmylogs/nginx110/logs
[root@localhost ~]# docker run -p 80:80 --name nginx \
> -v /ycmydata/nginx110/html:/usr/share/nginx/html \
> -v /ycmylogs/nginx110/logs:/var/log/nginx \
> -v /ycmyconfig/nginx110/conf:/etc/nginx \
> -d nginx:1.10
cfc9e4ce4a990a1935515c3b69c041dbe2af02963139493dd8927b78da676d80
# 注意一下这个路径映射到了/usr/share/nginx/html,我们在nginx配置文件中是写/usr/share/nginx/html,不是写/ycmydata/nginx110/html
[root@localhost conf]# cd /ycmydata/nginx110/html/
[root@localhost html]# vi index.html
填写如下内容
this is nginx110 html
保存退出
###浏览器访问:http://192.168.10.129:80/ 就会显示index.html内容