1、docker安装方式
官方文档 [https://docs.docker.com/engine/install/ubuntu/]
注意添加 源的时候不要选择官方的
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ #官方 $(lsb_release -cs) \ stable"
1.1 更改镜像源
修改文件 /etc/docker/daemon.json 没有的话新建
{ "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"] }
1.2 非root用户启动docker没有权限
sudo groupadd docker #添加docker用户组 sudo gpasswd -a youusername docker #将登陆用户加入到docker用户组中 newgrp docker #更新用户组
2、卸载docker
# 1、卸载软件 sudo apt-get purge docker-ce docker-ce-cli containerd.io # 2、删除相关 sudo rm -rf /var/lib/docker
3、命令
3.1 帮助命令
docker version
docker info #显示docker详细信息,包括容器和镜像的数量
docker 命令 --help
帮助文档地址 [https://docs.docker.com/reference/]
3.2 镜像命令
docker images
root@ubuntu:~# docker images # 查看本地镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 14 months ago 13.3kB
REPOSITORY 镜像的仓库源
TAG 镜像标签
IMAGE ID 镜像ID
CREATED 创建时间
SIZE 大小
docker search
root@ubuntu:~# docker search mysql # 搜索镜像 NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 10557 [OK] mariadb MariaDB Server is a high performing open sou… 3942 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Create… 774 [OK]
--filter=STARS=3000 # 结果过滤STARS大于3000的
docker pull
# 下载镜像 docker pull 镜像名:tag
root@ubuntu:~# docker pull mysql # 不加tag会默认下载最新版本 Using default tag: latest latest: Pulling from library/mysql 45b42c59be33: Pull complete # 分层下载,docker image的核心,将文件分块下载,块文件可对不同版本复用 b4f790bd91da: Downloading 325ae51788e9: Downloading adcb9439d751: Download complete ...
Disgest:sha256:2jhj6jere5oiojnnm9dsd... # 镜像的hash值
Status:Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # docker的真实地址
# 等价于
docker pull mysql
docker pull docker.io/library/mysql:latest
docker rmi
docker rmi -f docker_id # 删除一个镜像,镜像id或者镜像名 docker rmi -f docker_id1 docker_id2 docker rmi -f $(docker images -aq) # 删除全部停止的镜像
3.3 容器命令
新建容器并启动
docker run [option] image_id
# 参数说明
--name="your_name" # 容器名称
-d # 表示以后台方式运行
-it # 使用交互方式运行,进入容器查看内容
-p # 指定容器端口,小P
-p 主机ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口 # 不与主机通讯
容器端口
-P # 随机指定容器端口,大p
-rm # 容器启动后,退出就删除容器。一般用来测试,用完即删
# 测试
root@ubuntu:~# docker run -it centos /bin/bash # 进入容器,并且指定控制台
[root@ee50d14f28e4 /]#
wulc@ubuntu:~$ docker run -d --name nginx01 -p 3344:80 nginx # 在后台启动名叫nginx01的容器,容器内部端口号80,主机端口号3344
49afe9536bc3e645c5136171aa528eb15338dcf3c366ee209c5d801bdffa2e61
wulc@ubuntu:~$ curl localhost:3344 # 主机访问3344端口
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
端口暴露示意图
列出所有运行的容器
# docker ps [option] docker ps # 正在运行中的容器 -a # 所有历史运行过的容器 -n=? # 显示最近的前n个容器 -q # 只显示容器的编号
退出容器
exit # 容器直接停止并退出
ctrl + P + Q # 容器退出但是不停止
删除容器
docker rm 容器id # 删除指定的容器,正在运行的先停止
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 # 强制停止容器
3.4 常用的其他命令
后台启动容器
docker rum -d centos
# 问题docker ps,发现 centos 停止了,容器后台运行,就必须有一个前台应用,docker发现没有前台服务,会停止
查看日志
docker logs # 查看日志
-f # 持续打印log
-n # 输出log条数
--tail 10 # 显示最新10条
-t # 时间戳
# 测试
docker run -d centos /bin/sh -C "while true;do echo hello;sleep 1;done"
docker logs -tf --tail 10 35670d735c97
查看容器中的进程信息、容器信息
# top 命令
docker top 容器id # 查看容器内部的进程
docker status # 查看启动的容器的cpu内存信息
查看容器的源数据
docker inspect 容器id
# 显示当前容器的详细信息,包括容器镜像,网络,挂载等等。
进入当前正在运行的容器
方法一: docker exec -it 容器id bashShell # 进入之后会打开一个新的终端
方法二: docker attach 容器id # 进入容器正在执行的终端 docker run -d centos /bin/sh -C "while true;do echo hello;sleep 1;done" 进入控制台会一直打印。
从容器内拷贝文件到主机上
# 在主机中
docker cp 容器id:容器内路径 目的主机路径
# 可以手动拷贝,也可以使用 -v 卷实现自动
4. 小结