前置知识
Docker从17.03开始分为企业版(EE)与社区版(CE)
CE包含了完整的Docker平台
EE提供了一些收费的高级特性
Ubuntu安装docker
Ubuntu安装docker参考文章
1 卸载旧版本
sudo apt-get remove docker docker-engine docker.io
2 使用 APT 安装\
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
#为了确认所下载软件包的合法性,需要添加软件源的 `GPG` 密钥。
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 官方源
# $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#然后,我们需要向 `sources.list` 中添加 Docker 软件源
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 官方源
# $ echo \
# "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
# $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
3 安装 Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
4 使用脚本自动安装
# curl -fsSL test.docker.com -o get-docker.sh
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# sudo sh get-docker.sh --mirror AzureChinaCloud
5 启动 Docker
sudo systemctl enable docker
sudo systemctl start docker
6 启动 Docker
7 测试 Docker 是否安装正确
sudo groupadd docker
sudo groupadd docker
8 centos7安装docker-ce
sudo docker run --rm hello-world
安装步骤
参考文章(原文) centos7安装Docker详细步骤(无坑版教程)
1、卸载旧版本(如果之前安装过的话)
yum remove docker docker-common docker-selinux docker-engine
2、安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
3、设置 yum 源 ()括号里面的解释中文去掉(设置失败可以查看下面博主文章)
CentOS7配置阿里云镜像源(超详细过程
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)
4、选择docker版本并安装
yum list docker-ce --showduplicates | sort -r
5、选择一个版本并安装:yum install docker-ce-版本号
安装指定版本docker-ce
yum -y install docker-ce-18.03.1.ce
安装最新版本docker-ce
yum -y install docker-ce
6、启动 Docker 并设置开机自启
systemctl start docker
systemctl enable docker
7、查看docker版本
docker -v
命令相关
centos7.9启动docker
systemctl start docker
宿主机向docker容器参传输文件
docker cp 本机文件 容器ID:容器目录
例如向nginx容器传递一个文件夹:
docker cp ~/h5 247d:/usr/share/nginx/html
重新加载配置文件
systemctl reload docker
启动、容器、停止某个容器
docker start 容器ID
docker restart 容器ID
docker stop 容器ID
通过镜像启动容器
docker run --detach \
--hostname xxx.com \ # 替换自己将来(web端,代码clone)想要被外界访问时使用的域名
--publish 4438:443 \
--publish 8880:80 \
--publish 222:22 \
--name gitlab \
--restart always \ # 设置重启容器自启
--privileged=true \ # 获取宿主机root权限
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
--restart参数
原文
restart参数用于指定自动重启docker容器策略,包含3个选项:no,on-failure[:times],always,unless-stopped
no 默认值,表示容器退出时,docker不自动重启容器
docker run --restart=no [容器名]
on-failure 若容器的退出状态非0,则docker自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃
docker run --restart=on-failure:3 [容器名]
always 容器退出时总是重启
docker run --restart=always [容器名]
unless-stopped 容器退出时总是重启,但不考虑Docker守护进程启动时就已经停止的容器
docker run --restart=unless-stopped [容器名]
unless-stopped 容器退出时总是重启,但不考虑Docker守护进程启动时就已经停止的容器
docker update --restart=always [容器名]
--privileged
--privileged
是 Docker 运行容器时的一个选项,可以让容器进程拥有主机的 root 权限,这个选项用于允许容器执行需要使用特权模式的操作,比如某些系统调用或者设备访问。但是,使用 --privileged
选项会降低 Docker 容器的安全性,因此在使用时需要谨慎。
--detach
--detach
或 -d
选项表示在后台运行容器,即使容器退出也保持运行状态,这通常用于启动守护式进程。该选项会使 Docker 将容器的标准输出和标准错误输出转发到主机的日志系统,以便容器日志可以轻松访问。
注意:在使用 --detach
选项时,如果没有指定容器名称,Docker 会自动生成一个随机的名称。如果需要给容器命名,请使用 --name
选项。
修改已启动的容器的端口映射
参考文章
注意:先关闭docker容器
配置文件相关
insecure-registries
insecure-registries
是Docker守护进程配置文件/etc/docker/daemon.json
中的一个选项,用于配置Docker访问不安全的Docker镜像仓库时所需的信息。
默认情况下,Docker要求所有的镜像仓库都必须使用TLS加密来保证安全。如果有些镜像仓库没有启用TLS,那么Docker就无法访问这些仓库。在这种情况下,可以将这些不安全的镜像仓库添加到insecure-registries
选项中,以便Docker能够访问这些仓库。
需要注意的是,将不安全的镜像仓库添加到insecure-registries
选项中会降低安全性,因为所有从这些仓库拉取的镜像都没有经过加密保护,存在被篡改的风险。因此,应该仅将必要的不安全的镜像仓库添加到该选项中,并尽可能使用TLS加密来保护镜像仓库的访问。
问题记录
挂载目录导致容器内文件消失
常用的镜像启动命令汇总(实际映射端口请根据自己需求定义)
nginx-proxy-manager(中文版本镜像为chishin/nginx-proxy-manager-zh)
docker run \
-p 58000:80 \
-p 443:443 \
-p 50081:81 \
--name nginx-proxy-manager \
--restart unless-stopped \
-v /home/nginx-proxy-manager/data:/data \
-v /home/nginx-proxy-manager/letsencrypt:/etc/letsencrypt \
-v /home/nginx-proxy-manager/html:/usr/share/nginx/html \
-v /home/nginx-proxy-manager/etc/nginx:/etc/nginx \
-d jc21/nginx-proxy-manager:latest
nginx
docker run \
-p 8888:80 \
-p 9999:82 \
-p 4433:443 \
--name nginx \
--restart=always \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /home/nginx/log:/var/log/nginx \
-v /home/nginx/html:/usr/share/nginx/html \
-d nginx:latest
NginxWebUI
docker run -itd \
--name nginxWebUi \
-v /home/nginxWebUI:/home/nginxWebUI \
-e BOOT_OPTIONS="--server.port=58080" \
--net=host \
cym1102/nginxwebui:latest
mysql
docker run \
--name mysql \
-d \
-p 53306:3306 \
--restart=always \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-v /mydata/mysql/mysql_slave/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=yourpassword \
mysql:8.0.27
#drone安装
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_AGENTS_ENABLED=true \
--env=DRONE_GOGS_SERVER=http://192.168.124.46:3000 \
--env=DRONE_RPC_SECRET=coderqwe@w0roaasdajlk \
--env=DRONE_SERVER_HOST=192.168.124.46:3080 \
--env=DRONE_SERVER_PROTO=http \
-e DRONE_USER_CREATE=username:coderzzc,admin:true \
--publish=3080:80 \
--publish=3441:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:2
drone-runner
docker run --detach \
--volume=/var/run/docker.sock:/var/run/docker.sock \
--env=DRONE_RPC_PROTO=http \
--env=DRONE_RPC_HOST=192.168.124.46:3080 \
--env=DRONE_RPC_SECRET=coderqwe@w0roaasdajlk \
--env=DRONE_RUNNER_CAPACITY=2 \
--env=DRONE_RUNNER_NAME=docker-runner \
--publish=3005:3000 \
--restart=always \
--name=drone-runner \
drone/drone-runner-docker:1
redis
docker run \
--log-opt max-size=100m \
--log-opt max-file=2 \
-p 56379:6379 \
--name myredis \
--restart=always \
-v /home/redis/myredis/myredis.conf:/etc/redis/redis.conf \
-v /home/redis/myredis/data:/data \
-d redis redis-server /etc/redis/redis.conf \
--appendonly yes \
--requirepass yourpassword