docker的數(shù)據(jù)位置及安裝位置
- docker默認的安裝位置是在:"C:\Program Files\Docker"
- 數(shù)據(jù)位置晃跺,包括鏡像位置(wsl2)及docker桌面的位置是在:C:\Users\Administrator\AppData\Local\Docker
- 由于docker所耗存儲是大的掀虎,且隨鏡像的增多而增大,所以不能放在C盤春霍,但是: 網(wǎng)上直接遷移docker使用的wsl2所在位置址儒,或者直接軟鏈數(shù)據(jù)位置(或\wsl\data):都將使docker desktop無法打開或閃退
- 遂在安裝之前莲趣,直接將上面兩個目錄都完整軟鏈喧伞;然后再安裝docker desktop
mklink /j "C:\Users\Administrator\AppData\Local\Docker" "F:\Docker"
mklink /j "C:\Program Files\Docker" "F:\Program Files\Docker"
mklink /j "C:\Users\Administrator\AppData\Roaming\Docker" "F:\Roaming\Docker"
mklink /j "C:\Users\Administrator\AppData\Roaming\Docker Desktop" "F:\Roaming\Docker Desktop"
- 隔了幾天潘鲫,好像又閃退溉仑,無語
mysql
- powershell中拉鏡像
docker pull mysql
- 創(chuàng)建并啟動容器
docker run -p 3307:3306 --name mysql --privileged=true -v /g/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=來個密碼 -d mysql
- 兼容之前版本的密碼認證浊竟,需要進入容器,root登錄mysql后频;做以下操作徘郭,主機客戶端才能連接
CREATE USER '來個用戶'@'%' IDENTIFIED BY '來個密碼';
GRANT ALL ON *.* TO '上面的用戶'@'%';
ALTER USER '上面的用戶'@'%' IDENTIFIED BY '來個密碼' PASSWORD EXPIRE NEVER;
# 可以修改密碼
# ALTER USER '上面的用戶'@'%' IDENTIFIED WITH mysql_native_password BY '換個密碼';
flush privileges;
PS:如果出現(xiàn)下面這個錯誤残揉,等一會就行
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
redis
- 拉鏡像
docker pull redis
- 運行容器
docker run -p 6380:6379 --name redis -v /g/docker/redis/conf:/etc/redis/redis.conf -v /g/docker/redis/data:/data -v /g/docker/redis/persist_data:/persist_data -d redis redis-server /etc/redis/redis.conf/redis.conf
確保主機中的掛載目錄存在
redis-server 指定的是文件,而非目錄
其中redis的配置G:\docker\redis\conf\redis.conf
# 注釋掉這部分,使redis可以外部訪問镇草;否則外部訪問將報錯EOF
# bind 127.0.0.1
# 用守護線程的方式啟動
daemonize no
# 給redis設置密碼
requirepass q123456we
# AOF持久化開啟,默認是no
appendonly yes
# 更改本地redis數(shù)據(jù)庫存放文件夾(可選)
dir /persist_data
# 防止出現(xiàn)遠程主機強迫關閉了一個現(xiàn)有的連接的錯誤,默認是300
tcp-keepalive 300
# AOF持久化配置
appendfsync everysec
# RDB持久化關閉,默認是no
save ""
dockerfile 構建
目錄
? /workspace tree .
.
├── Dockerfile
├── download
│ ├── go1.18.3.linux-amd64.tar.gz
│ ├── protoc
│ │ ├── bin
│ │ ├── include
│ │ └── readme.txt
│ └── protoc.tar.gz
├── run.sh
└── zshrc_tmp
命令(注意最后的點)
docker build -f Dockerfile -t workspace:go .
dockerfile 部分代碼
FROM ubuntu:18.04
LABEL Author="yiwei.duan@outlook.com" Description="This image is ubuntu:20.04 with common software." Version="1.0"
WORKDIR /workspace
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.list \
&& echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list
RUN apt-get update \
&& apt-get install -y openssh-server \
&& mkdir /var/run/sshd \
&& echo 'root:來個密碼' | chpasswd \
&& echo "PermitRootLogin no " >> /etc/ssh/sshd_config \
&& echo "PasswordAuthentication yes " >> /etc/ssh/sshd_config \
&& echo "PubkeyAuthentication yes " >> /etc/ssh/sshd_config \
&& echo "來個新用戶名 ALL=(ALL) ALL" >> /etc/sudoers
ADD run.sh /
RUN chmod +x /run.sh
CMD ["/run.sh"]
TIPS:
出現(xiàn) unexpected EOF因宇,可能是電腦或者網(wǎng)絡不太行察滑,直接繼續(xù)執(zhí)行之前的命令贺辰。
如果饲化,emmm滓侍,比如撩笆,A容器使用過了2222端口進行了ssh連接夕冲,但之后將A刪除了歹鱼,新建B容器弥姻,也使用2222端口庭敦,需要將~/.ssh/known_hosts中的那條 [127.0.0.1]:2222刪除
dockerfile中使用CMD秧廉,如下疼电,容器無法啟動蔽豺;但sh文件單獨執(zhí)行是成功的茫虽,這時將run.sh中最后追加 " su root "即可
ADD run.sh /
RUN chmod +x /run.sh
CMD ["/run.sh"]
dockerfile中無交互生成ssh濒析,并將本地公鑰寫進autthorized_key
RUN ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa \
&& touch ~/.ssh/authorized_keys \
&& chmod 600 ~/.ssh/authorized_keys \
&& chmod 700 ~/.ssh \
&& echo "主機公鑰号杏,位置在~/.ssh/id_rsa.pub" >> ~/.ssh/authorized_keys
dockerfile中生成登錄git的ssh
RUN ssh-keygen -t rsa -C "github郵箱" -P "" -f ~/.ssh/docker_rsa \
&& touch ~/.ssh/config \
&& echo "Host github.com\n\tHostName github.com\n\tPreferredAuthentications publickey\n\tIdentityFile ~/.ssh/docker_rsa\n\tUser duan1v" >> ~/.ssh/config
- 到github中 New SSH key
- 測試連接git
ssh -T git@github.com
主機使用vscode主经;配置~/.ssh/config
Host 來個名字
HostName 127.0.0.1
User docker用戶名
Port docker端口
dockerfile無交互創(chuàng)建新用戶
RUN useradd 來個用戶名 -m \
&& echo "來個密碼\n重復密碼" | passwd 上面那個用戶名 \
&& usermod -a -G 上面那個用戶名,sudo 上面那個用戶名
docker 推送鏡像
- 先創(chuàng)建倉庫罩驻,創(chuàng)建之后可以看到惠遏,倉庫名 是以"docker用戶名/"為前綴的,還有一部分是自定義的透绩,記住這個倉庫名帚豪;自定義部分可以取狸臣,需要推送的那個鏡像名就好固棚,不用加TAG
- 主機powershell
PS C:\Users\Administrator\Desktop> docker login
Authenticating with existing credentials...
Login Succeeded
- 將需要上傳的 鏡像A:A的TAG 重新生成一個與倉庫名同名的鏡像
docker tag 鏡像A:A的TAG 倉庫名:A的TAG
- 最后push一下
docker push 倉庫名:A的TAG
容器使用主機的vpn此洲,dockerfile中添加
ENV https_proxy="http://host.docker.internal:主機的代理端口" \
http_proxy="http://host.docker.internal:主機的代理端口" \