docker入门

docker安装

在 Ubuntu |上安装 Docker 引擎Docker 文档

卸载旧版本

1
2
$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ apt-get autoremove -y docker docker-ce docker-engine docker.io containerd runc docker-ce-cli

使用存储库安装 复制就完了

更新软件包

1
2
3
4
5
6
$ sudo apt-get update
$ sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release

GPG密钥

1
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

验证:

1
2
3
4
5
$ sudo apt-key fingerprint 0EBFCD88
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]

阿里云镜像

1
$ sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

安装docker引擎

1
2
3
4
5
6
7
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 对应版本docker
apt-cache madison docker-ce
apt-cache madison docker-ce-cli
# 选一个心动的
apt-get install docker-ce=5:20.10.24~3-0~ubuntu-focal docker-ce-cli=5:20.10.24~3-0~ubuntu-focal containerd.io docker-compose-plugin

验证:

1
docker version

docker镜像

搜索镜像(docker hub)

images查看镜像

1
docker images

pull下载镜像

1
2
3
docker pull mysql:5.7
# docker pull [name]:[tag]
# tag默认latest

rmi删除镜像

1
2
3
4
docker rmi mysql:5.7
# docker rmi [name]:[tag]
docker rmi 9384bbce10b2
#docker rmi [image]

stats查看docker进程

1
docker stats

tag

1
docker tag [image] [新image]

save保存为tar

1
docker save -o [路径/name.tar] [images]

load加载打包的镜像

1
docker load -i [name.tar]

docker容器

ps查看容器

1
2
3
4
5
docker ps # 查看运行容器
# docker ps [options]
option:
-a # 所有容器(默认是正在运行的容器)
-q # 只显示id

run运行容器

1
2
3
4
5
6
7
8
9
10
11
12
docker run -it -p 80:80 --name nginx01 nginx /bin/bash
#docker run [options] [image] [command]
option:
-it # 交互方式运行
-d # 后台
-p # 端口
-p [本机端口]:[容器端口]
-p [本机容器同端口]
-P # 随机端口
--name [name] # 容器名
-v [本机路径]:[容器路径] # 挂载数据卷
-network [name] # 自定义网络

进入容器

attach进入

1
2
docker attach nginx01 # exit后容器关闭,ctrl+p+q后容器依旧运行
# docker attach [container]

exec进入

1
2
3
4
docker exec -it nginx01 /bin/bash # exit后容器依旧运行
# dockr exec [options] [container] [command]
option:
-it # 交互方式进入

退出容器

1
2
exit
# 或ctrl+p+q(不停止退出)

容器状态操作

start启动关闭的容器

1
docker start [container]

restart重启容器

1
docker restart [container]

关闭容器

1
2
docker stop [container] # 关闭
docker kill [container] # 强制关闭

rm删除容器

1
2
docker rm [container]
docker rm -f [container] # 不关闭强制删除

logs查看容器日志

1
2
3
docker logs -tf --tail 25 nginx01
# docker logs [options] [container]
# 照着写就完了

top查看容器内进程(command)

1
docker top [container]

inspect查看容器信息

1
docker inspect [container]

cp拷贝文件到宿主机

1
2
docker cp a330bcd500d2:/home/hello.txt /home
# docker cp [container]:[容器路径] [宿主机路径]

commit提交镜像(快照)

1
2
3
4
# docker commit [options] [container] [新image名字]
option:
-m 描述
-a 作者

Dockerfile

基本指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FORM [image] # 基础镜像
MAINTAINER [作者名+邮箱]
RUN [command] # 构建时运行
ADD [包名] [容器内路径] # 自动解压
WORKDIR [路径] # 工作目录
VOLUME [匿名] # 数据卷
# VOLUME ["volume01","volume02"]
EXPOSE [端口]
CMD [command] # 容器启动时运行
ENTRYPOINT [command] # 同CMD但可追加
ONBIULD # 我不会
COPY [本机路径] [容器路径]
ENV [name] [路径]
# ENV JAVA_HOME /usr/local/java
# ENV PATH $PATH:$JAVA_HOME/bin

biuld

1
2
3
4
5
6
docker biuld -f dockerfile01 -t nginx01 .
docker biuld [options] .
option:
-f dockerfile名字(默认Dockerfile)
-t 新images名字
. 当前目录

docker hub

login登录

1
dockeer login -u [name] -p [password]

push上传

1
docker push [image:tag]

docker网络

network查看网络

1
docker network ls

create创建网络

1
2
3
4
5
6
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
# docker network create [options] [name]
options:
--driver bridge # 桥接
--subnet 192.168.0.0/16 # 子网
--gateway 192.168.0.1 # 默认网关

connect容器连接网络

1
docker network connect [mynet] [container]