docker 容器操作、應用部署、mysql,redis,nginx、遷移與備份、Dockerfile

綴月發表於2023-04-13

容器操作

# 啟動容器
     docker start 容器id
# 停止容器
     docker stop 容器id
# 檔案複製
     先建立檔案 mkdir:資料夾  vi vim  touch:檔案
     # 容器的檔案copy到宿主機上(不是在容器內部操作)
     docker cp 容器名稱:容器目錄 需要複製的檔案或目錄
     docker cp  20fd8:/home/lqz.txt /home/lqz.txt
     # 宿主機的檔案copy到容器中
     docker cp 需要複製的檔案或目錄 容器名稱:容器目錄
     docker cp ./lqz.txt 20fd894a3f20:/home/lqz.txt
# 檢視容器IP地址
     docker inspect 容器名稱  # 檢視容器的詳細描述  很多
     docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱(容器ID)

    # 在多個容器之間是可以ping通的
    # centos:172.17.0.3
    # mysql:172.17.0.2

# 刪除容器(刪除已停止的容器)
    docker rm 容器id  
    docker rm `docker ps -a -q`
    
 # 無狀態的服務
     myslq reids
     uwsgi+django

應用部署

mysql部署

docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

# 做目錄對映:data檔案,配置檔案
# 建立資料夾
mkdir /home/mysql
mkdir /home/mysql/conf.d
mkdir /home/mysql/data/
vim /home/mysql/my.cnf
[client]
default-character-set=utf8
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000

docker run  -di -v /home/mysql/data/:/var/lib/mysql -v /home/mysql/conf.d:/etc/mysql/conf.d -v /home/mysql/my.cnf:/etc/mysql/my.cnf -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7      
        
     
    
# 建立庫,建立表,插入資料

# 關閉容器,刪除容器,mysql的容器沒了,但是資料在宿主機上放著

# 再執行起一個容器,做好目錄對映,資料都回來了

redis

# 拉取redis映象
docker pull redis
mkdir /root/data
vim /root/redis.conf

bind 0.0.0.0
daemonize NO
protected-mode no
requirepass 123456

# 執行
docker run -id  -p 6379:6379 --name redis -v /root/redis.conf:/etc/redis/redis.conf -v /root/data:/data redis  redis-server /etc/redis/redis.conf
            

# 遠端連結redis操作

redis.conf 檔案 刪了再重新搞 透過該檔案跑在前臺 一直執行

nginx

# 拉取nginx映象
docker pull nginx

# run起容器
# docker run -id --name nginx -p 80:80 nginx
    
# /usr/share/nginx/html
docker run -id --name nginx -p 80:80 -v /root/html:/usr/share/nginx/html nginx
# 以後只需要修改宿主機的/root/html 路徑,看到頁面就是修改後的

遷移與備份

# 容器儲存為映象
    執行一個centos容器
    docker run -id --name centos_vim centos:7
    在容器中裝vim
    docker exec -it 容器ID號 /bin/bash
    yum install vim -y
    
    把容器做成映象(centos+vim)
    docker commit centos_vim centos_vim_image

     把centos_vim 容器刪除
    docker rm centos_vim
     基於新構建的映象,執行成容器
    docker run -id --name centos_vim centos_vim_image:latest
     進入到容器中,檢視,軟體都在
    docker exec -it 容器ID號 /bin/bash
# 映象備份和恢復
  docker save -o centos_vim_image.tar centos_vim_image
     刪除容器,刪除映象
     把備份的映象恢復
    docker load -i centos_vim_image.tar

Dockerfile

# 映象從哪裡來的?
    1 遠端倉庫拉取的 docker pull
    2 用容器做成的映象 docker commit 
    3 把備份的恢復 docker load
    4 使用Dockerfile來構建
# 什麼是Dockerfile
    Dockerfile是由一系列命令和引數構成的指令碼檔案,這些命令應用於基礎映象並最終建立一個新的映象
    
# Dockerfile的命令
    FROM 基礎映象         #基於哪個基礎映象來構建
    MAINTAINER lqz       # 宣告映象的建立者
    ENV key value       # 設定環境變數 (可以寫多條)
    RUN command        #是Dockerfile的核心部分(可以寫多條)
    ADD source_dir/file dest_dir/file 	#將宿主機的檔案複製到容器內,如果是一個壓縮檔案,將會在複製後自動解壓
    COPY source_dir/file dest_dir/file 	# 和ADD相似,但是如果有壓縮檔案並不能解壓
    WORKDIR path_dir # 設定工作目錄,執行起這個容器,來到的路徑就是這個路徑
    
    
    
# 構建一個帶vim的centos映象
vim Dockerfile

FROM centos:7
MAINTAINER lqz
ENV name lqz
RUN yum install vim -y
RUN mkdir /lqz
RUN touch /lqz/ss.py
RUN echo 'print(1)' >/lqz/ss.py
COPY /root/redis.conf /lqz/redis.conf
WORKDIR /lqz


# 基於dockerfile構建映象
docker build -t='centos_lqz_vim' .

# 基於這個映象執行容器
 docker run -id --name xx centos_lqz_vim
# 進入到容器
docker exec -it xx /bin/bash
# 驗證vim,和資料夾,檔案是否存在

相關文章