安装
https://docs.docker.com/engine/install/debian/
使用国内仓库
sudo add-apt-repository \"deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian \$(lsb_release -cs) \stable"
阿里云镜像加速
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://XXXX.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
软件安装
mysql
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
redis
docker run -d --name redis -p 6379:6379 redis
nacos
docker run -d --name nacos -p 8848:8848 -e MODE=standalone nacos/nacos-server
docker run
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -P: 随机端口映射,容器内部端口随机映射到主机的高端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- —name=”nginx-lb”: 为容器指定一个名称;
- —dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
- —dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
- -h “mars”: 指定容器的hostname;
- -e username=”ritchie”: 设置环境变量;
- —env-file=[]: 从指定文件读入环境变量;
- —cpuset=”0-2” or —cpuset=”0,1,2”: 绑定容器到指定CPU运行;
- -m :设置容器使用内存最大值;
- —net=”bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
- —link=[]: 添加链接到另一个容器;
- —expose=[]: 开放一个端口或一组端口;
-
镜像管理
删除本地所有镜像
docker rmi -f $(docker images -q)
清理所有临时镜像
docker rmi $(docker images -q -f dangling=true)
备份所有镜像列表
docker images|awk 'NR>1{print$1":"$2}'|sort > images.list
查看镜像内的环境变量
docker run <imageID> env
导出
一般是 import 与 export 搭配,save 和 load搭配
save
load 方式加载的镜像,没有丢失镜像的历史,可以回滚到之前的层。
使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入
[root@iZwz9hpx33v77we05l6sypZ ipmi_exporter]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEprom/ipmi-exporter v1.1.0 d83643e9ea2b 4 minutes ago 87.6MBquay.io/prometheus/golang-builder 1.13-base 3ba220caa866 7 days ago 868MBfjudith/draw.io latest 76508470bc97 8 days ago 673MBubuntu 18.04 ccc6e87d482b 5 weeks ago 64.2MB[root@iZwz9hpx33v77we05l6sypZ ipmi_exporter]# docker save d836 > ipmi.tar[root@iZwz9hpx33v77we05l6sypZ ipmi_exporter]# lscollector.go CONTRIBUTING.md Dockerfile go.sum ipmi_remote.yml LICENSE Makefile README.mdconfig.go docker-compose.yml go.mod ipmi_local.yml ipmi.tar main.go Makefile.common vendor
- export
export 导出得镜像要小于 save 导出的镜像,但不支持将多个镜像打包成一个文件,(import)导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作,适合用于制作基础镜像。
docker export f299f501774c > ims.tar
- docker export 的应用场景:主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。
docker save 的应用场景:如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入。
导入
import
可以为镜像指定名称
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
[root@control01 ~]# docker import - prom/ipmi-exporter:v1.1.0 < ipmi.tarsha256:bd6b506a72d8aa00d0614074f85b28320cdd67a128000c05cc9a0b9d884144a0[root@control01 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEprom/ipmi-exporter v1.1.0 bd6b506a72d8 4 seconds ago 90.1MB
- load
docker load < hangge_server.tar
重命名
重命名后会有多余的一个镜像docker tag IMAGEID REPOSITORY:TAG
➜ ~ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.7.28 1e4405fe1ea9 3 weeks ago 437MBmysql mysql5.7.28 1e4405fe1ea9 3 weeks ago 437MBblue-wizard blue-wizard 1afeede877b3 8 weeks ago 2.35GBblue-wizard-1.0.1-dev003 latest 1afeede877b3 8 weeks ago 2.35GB
- 对于不同REPOSITORY,不同TAG的镜像可以直接原有的,并不会删除镜像
docker rmi REPOSITORY:TAG
- 对于相同REPOSITORY,不同TAG的镜像,采用第一种方式必须加-f参数才可删除
➜ ~ docker rmi mysql:5.7.28Untagged: mysql:5.7.28➜ ~ docker rmi mysql:mysql5.7.28Error response from daemon: conflict: unable to remove repository reference "mysql:mysql5.7.28" (must force) - container ba0c051a7292 is using its referenced image 1e4405fe1ea9➜ ~ docker rmi -f mysql:mysql5.7.28Untagged: mysql:mysql5.7.28Untagged: mysql@sha256:5779c71a4730da36f013a23a437b5831198e68e634575f487d37a0639470e3a8➜ ~ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE<none> <none> 1e4405fe1ea9 3 weeks ago 437MB
此时再次重命名即可
➜ ~ docker tag 1e4405fe1ea9 mysql:5.7.28➜ ~ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.7.28 1e4405fe1ea9 3 weeks ago 437MB
容器管理
显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID
docker ps -a|grep Exited|awk '{print $1}'
批量删除
docker rm `docker ps -a|grep Exited|awk '{print $1}'`
批量启动
docker start `docker ps -a|grep Exited|awk '{print $1}'`
重命名容器
docker rename my_container my_new_container
复制
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATHdocker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
容器日志
docker logs [OPTIONS] CONTAINER
网络管理
构建镜像过程中的网络
对于拉取Dockerhub上的镜像,可以采用各大服务商提供的镜像加速器
对于采用Dockerfile,自行build构建的镜像,遇到网络问题,但宿主机网络正常,可以依赖宿主机网络
docker build --network=host -t xx:xx .
运行容器过程中的网络
使用宿主机网络
docker run -net=host
一张图总结
问题
容器无法使用vim, yum等
修改Dockerfile,添加要安装的依赖是不可行的,这与dockerfile定义的os有关
RUN yum install -y vim
- 容器进入不了bash
试试 sh
- Docker 容器与宿主机时区不一样
容器创建时加入时区挂载选项: -v /etc/localtime:/etc/localtime
