Docker安装
自动安装
使用官方脚本自动安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
手动安装
卸载旧版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装依赖软件
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
设置仓库源
官方源,访问比较慢
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
清华大学
$ sudo yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
阿里云
$ sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
开始安装
$ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Docker操作
启动
$ sudo systemctl start docker
设置自启动
$ sudo systemctl enable docker
停止
$ sudo systemctl stop docker
卸载
删除安装包
yum remove docker-ce
删除镜像、容器、配置文件
rm -rf /var/lib/docker
查看版本
docker -v
docker操作需要root权限,如果不是root用户的话需要使用sudo或者把用户添加到docker用户组
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
docker -v #测试docker命令是否可以使用
镜像操作
查找镜像
官方镜像仓库https://hub.docker.com/
docker search 镜像名称:版本号
docker search mysql:8.0.12
拉取镜像
docker pull 镜像名称:版本号
docker pull mysql # 不写版本号,默认拉取最新版本
查看本地镜像
docker images
- REPOSITORY:仓库名
- TAG:标签
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
运行镜像
镜像每次运行都会创建一个容器,类似于安装包进行安装
docker run -d --name 容器名称 -p 80:80 镜像名称
docker run -d --name mysql -p 80:80 -e MYSQL_ROOT_PASSWORD=123456 mysql
- -d:表示在后台运行
- --name:容器名称
- -p:端口映射,表示把本机端口映射到容器中的端口
- -e:设置环境变量,从镜像官网介绍中查看可配置的环境变量
- nginx:使用的镜像名称
删除镜像
docker rmi 镜像名称
docker rmi mysql
容器操作
通过使用docker run运行镜像会创建一个容器,紧接着可以对容器进行操作
查看容器
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器
- CONTAINER ID:容器ID
- IMAGE:镜像名称
- COMMAND:创建容器的命令
- CREATED:容器创建时间
- STATUS:容器状态
- PORTS:容器的端口映射信息(使用
docker port 容器名称/容器ID
可以单独查看端口映射信息) - NAMES:容器名称
在操作容器时,可使用容器名称或者容器ID,并且容器ID可使用前缀,只要能唯一区分出容器即可,比如上面nginx容器ID为1056aad831bb,mysql容器ID为9c1ecf3789cc,所以下面的操作中可以使用1表示nginx,9表示mysql
启动容器
docker start 容器名称/容器ID
docker start mysql/9
重启容器
docker restart 容器名称/容器ID # 重启正在运行的容器
docker restart nginx/1
停止容器
docker stop 容器名称/容器ID
docker stop nginx/1
删除容器
docker rm [-f] 容器名称/容器ID
docker rm -f nginx/1
- -f:强制删除
进入容器
attach进入容器后,退出时容器会停止(不建议使用,不要使用)
docker attach 容器名称/容器ID
exec进入容器,退出时容器不会停止(建议使用,一定要用)
docker exec -i -t 容器名称/容器ID bash
- -i:交互式方式进入容器
- -t:以终端形式进入容器
- bash:表示要执行的命令
这个是最常用也是最基本的进入容器的命令(记住它!记住它!记住它!)意思是进入了容器,并且打开了终端,就像用XShell连接成功一样,可以执行命令了。
退出容器
exit
查看日志
docker logs -f 容器名称/容器ID
- -f:和tail -f一样,查看实时日志
查看容器信息
docker inspect 容器名称/容器ID # 查看容器详细信息
docker inspect 镜像名称/镜像ID # 查看镜像详细信息
如果容器名称和镜像名称一样,使用名称时默认查的是容器信息,所以建议使用ID
导出容器
导出容器快照为tar文件
docker export 容器名称/容器ID > 容器.tar
docker export nginx > nginx.tar
导入容器
将容器快照导入为镜像
docker import 文件名称/远程URL 仓库名称:标签名称
docker import nginx.tar test/nginx:v1
数据卷
网络操作
默认使用的是docker0虚拟网络,可以自己新建网络,把容器添加到网络中,这样同一个网络中的容器可以根据容器名进行访问,不用使用ip
Dockerfile
用来构建镜像
示例:
FROM openjdk:8
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY docker-demo.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
docker compose
用来一键创建多个容器
示例:
version: "1.0"
services:
mysql:
image: mysql
container_name: mysql
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
volumes:
- "/home/mysql/conf:/etc/mysql/conf.d"
- "/home/mysql/data:/var/lib/mysql"
- "/home/mysql/init:/docker-entrypoint-initdb.d"
networks:
- new
demo:
build:
context: .
dockerfile: Dockerfile
container_name: demo
ports:
- "8080:8080"
networks:
- new
depends_on:
- mysql
networks:
new:
driver: bridge
问题记录
docker-compose.yml网络配置不生效问题?
初始设置
mysql:
networks:
- new
demo:
networks:
- new
修改后
mysql:
networks:
- new
demo:
networks:
- new
networks: # 声明新创建的网络
new:
driver: bridge
mysql初始化脚本不执行?
删除data目录下文件,重启生效
标签:容器,入门,ID,名称,mysql,镜像,docker,Docker From: https://www.cnblogs.com/bright1st/p/17606607.html