参考:https://zhuanlan.zhihu.com/p/544310970
sudo systemctl status docker
或
sudo service docker status
启动(start)、停止(stop)、重启(restart)、查看状态(status)等。
创建并运行
sudo docker run -it ubuntu:latest /bin/bash
创建不运行
sudo docker run -it -d alpine:latest
运行容器
sudo docker attach d74f2ceb5f3a
或
docker exec -it 容器id /bin/bash
docker exec -it mycontainer /bin/bash
docker exec 相当于进入容器并开启一个新的终端,可以在里面操作。
如果使用exit退出,容器也不会停止。
docker attach 进入容器正在执行的终端,不会启动新的进程。
如果使用exit退出,容器会停止运行!
创建并命名
sudo docker run -it -d --name ostechnix_alpine alpine:latest
sudo docker run -it --name name ubuntu:latest /bin/bash
docker exec 命令用于在正在运行的 Docker 容器中运行指定的命令。
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
其中,OPTIONS 可以省略,常用的选项如下:
-i:保持标准输入打开,使得可以与容器交互。
-t:分配一个伪终端,使得可以与容器交互。
CONTAINER 是要操作的容器的名称或 ID。
COMMAND 是要在容器内运行的命令。
ARG… 是命令的参数。
在名为 mycontainer 的容器中执行命令 /bin/bash 并分配一个伪终端:
docker exec -it mycontainer /bin/bash
在名为 mycontainer 的容器中执行命令 ls -l:
docker exec mycontainer ls -l
# 常用的参数
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像的标识|镜像名称[tag]
# -d: 代表后台运行容器
# -p: 宿主机端口:容器端口: 为了映射当前Linux的端口和容器的端口
# --name 容器名称: 指定容器的名称
#查看运行
sudo docker ps
#列出所有可用的容器(运行或者停止)
sudo docker ps -a
启动start、重启restart、暂停pause 和终止容器stop
#名称或ID
sudo docker start modest_cray
sudo docker start 10615254bb45
容器脱离(不要退出)回到主机系统的 shell。不要终止或者关闭容器。使用 CTRL+P 然后 CTRL+Q 从容器中脱离,这样不会关闭容器。
删除容器
sudo docker rm 377e6d77ebb5
sudo docker images
sudo docker search ubuntu
sudo docker pull ubuntu
创建
sudo docker commit 377e6d77ebb5 ostechnix/ubuntu_apache
移除
sudo docker rmi ce5aa74a48f1
在宿主机和容器之间相互COPY⽂件 cp的⽤法如下
# 容器中 复制到 宿主机
docker cp [OPTIONS] CONTAINER:PATH LOCALPATH
eg:docker cp tomcat-8081:/usr/local/tomcat/webapps/ROOT/index.jsp /root/
# 宿主机 复制到 容器中
docker cp [OPTIONS] LOCALPATH|- CONTAINER:PATH
eg:docker cp /root/index.html tomcat-8081:/usr/local/tomcat/webapps/ROOT/
复制文件
将当前目录tpch文件夹复制到mysql容器相应的位置:
docker cp tpch mysql56:/var/lib/mysql #mysql56为容器名
容器文件拷贝到宿主机:
docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
Docker数据卷
通过镜像创建一个容器。容器一旦被销毁,则容器内的数据将一并被删除。但有些情况下,通过服务器上传的图片出会丢失。容器中的数据不是持久化状态的。这个时候可以通过数据卷来解决这个问题。https://zhuanlan.zhihu.com/p/430652941
菜鸟:https://www.runoob.com/docker/docker-container-connection.html
https://www.cnblogs.com/makalochen/p/14242125.html#%E7%AE%80%E4%BB%8B
我们安装Docker后,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host。
host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
None:该模式关闭了容器的网络功能,相当于一个回环网络。
Bridge:此模式会为每一个容器分配、设置IP等,并将容器连接到一个叫docker0的虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。
以哪种方式让服务器内部的容器与公网进行通信。
1、假如使用的是默认的桥接网络模式,启动容器的时候需要使用参数-p 宿主机端口:容器端口设置端口的映射。
2、假如使用的是host主机模式,因为使用的是宿主机的ip与端口,那就直接可以与公网通信。
查看IP:
ip安装apt-get update & apt-get install -y iproute2
ip addr 或 ip a
或用ifconfig
docker network ls
docker network inspect NETWORKID
链接:https://blog.csdn.net/longjuanfengzc/article/details/89340391
https://blog.csdn.net/u013355826/article/details/84987233
1.默认创建容器时默认连接的是bridge,其实可以创建容器时可以指定使用的网络,可以指定host、none甚至可以自己建一个bridge
docker network create -d bridge my-bridge
2.通过link,使用link相当于使用DNS记录(不推荐)
通过busybox创建一个容器名为test1
docker run -d --name test1 busybox /bin/sh -c “while true; do sleep 3600; done”
再用busybox创建一个容器名为test2,创建test2时使用了link链接了test1
docker run -d --name test2 --link test1 busybox /bin/sh -c “while true; do sleep 3600; done”
将容器连接到网络
docker run --net= …
或者将已存在容器加入新的网络
docker network connect
创建时指定网络
docker network create -d bridge my-bridge
启动容器并指定模式
默认是Bridge
在容器启动命令时用参数–net=host指定当前容器网络模式
如: docker run -itd --net=host centos:7 /bin/bash
参考:https://cloud.tencent.com/developer/article/1831540
外网如何访问容器?
端口映射,-p指定对应端口
外网访问容器用到了docker-proxy和iptables DNAT
可以通过 -P 或 -p 参数来指定端口映射。
当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。
-p (小写的)可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。
docker run -d -P training/webapp python app.py
使用 hostPort:containerPort 格式本地的 5000 端口映射到容器的 5000 端口,可以执行
docker run -d -p 5000:5000 training/webapp python app.py
跨主机网络解决方案
docker原生的overlay和macvlan
第三方的flannel、weave、calico